Выборка данных с БД...

TRL

Новичок
Выборка данных с БД...

Такое вот дело.

Есть база:

[sql]
****
MessageToID,

MessageFrom
*****
[/sql]

Это два основных поля в таблице сообщений. В первом поле укзывается кому сообщение, во втором от кого!

При выборке сообщений

[sql]
WHERE
(mess.MessageToID = '".intval($_SESSION["user_id"])."'
AND mess.MessageFrom = sex.UserID
AND mess.MessageFrom = u.UserID
) OR (mess.MessageFrom = '".intval($_SESSION["user_id"])."'
AND mess.MessageToID = sex.UserID
AND mess.MessageToID = u.UserID
) GROUP BY mess.MessageFrom
[/sql]

выводит лажу какую-то...

Сначало сообщения с пользователями, у которых более 1-го сообщения, т.е. например я написал кому-то, потом мне написал он же...
А потом выборка идёт непонятных сообщений.... т.е. я написал пользователю кокнретному.. вместо тго, шоб выбрать сообщения относящиеся тольок к нему - выбирает чёрт знает шо...

В общем задача такова:
нужно поправить запрос таким образом:
- ест два пользоваетял А и В. Если пользователь А написал пользователю В, после пользователь В написал пользователю А - всё ок, если же Пользователь А написал пользователю В, а пользователь В ничего не писал - Как сделать эту выборку в одном запросе!

Т.е. ужно учесть два варианта, как единое сообщение от пользователя, так и переписка (боле 1-го сообщения с обеих сторон).

Если кому, шо не ясно пишите...
 

whirlwind

TDD infected, paranoid
Нифига не понятно. Напиши условие на бумажке. Пойми его, а потом уже пиши запросы.

Есть поля to и from. Как сформулировать условие, что бы отбирались сообщения для одного конкретного пользователя?
Да элементарно: интересующий нас user id должен быть в to ИЛИ from.

Оно?
 

TRL

Новичок
нет не оно. я так уже пробовал...

после того, как выбираем данные, кто кому прислал сообщение, мы сразы собираем данные о пользователи приславшем сообщение.

Смотри конкретный случай.

Я пишу пользователю сообщение. После того, смотрю список сообщений, а в списке сообщений выдаёт то. что я написал сообщение! Хотя в запросе чётко указано, что:

AND mess.MessageToID = sex.UserID AND mess.MessageToID = u.UserID

AND mess.MessageFrom = sex.UserID AND mess.MessageFrom = u.UserID

Если мы написали, тогда собираем данные о пользователе, которому мы написали, а не пользовател, который нам написал... как в первом варианте....

Вообще немного конкретизирую - это система сообщений между пользователями в клубе знакомств.

-~{}~ 03.11.06 14:02:

я вот думаю может стоит CASE использовать...
 

TRL

Новичок
Автор оригинала: boombick
а может сначала использовать, а потом спросить если не получится?
пробовал только что не получается... всёравно не то всё...

в общем я немного понятней сейчас сформулирую с илюстрацией.

На скрине виден запрос (укоротил его) и результаты запроса:



теперь проблема!

Смотрим строки с MessageID равным 2 и 1.

Эти записи подразумевают под собой то, что сначало написал пользователь 1 пользователю 7, после пользователь 7 написал пользователю 1.

Должно выбираться только уникальные записи, т.е. без подобных повторений. Ошибка в результатах этого запроса - выборка лишних записей, для пользователей, которые уже были выбранны раньше (см. 1 резльтат), т.е. последняя запись должна быть исключена из поиска!

Решил всётаки делать сначало выборку всех уникальных записей, а вторым запросом уже выборку всех данных по записи...

-~{}~ 03.11.06 16:23:

а чего Имиджи не отображаются? :(
 

Michael_X

Guest
ну а почему не сделать проверку на "входящие" и "исходящие"

Вообще у тебя где-то ошибка в запросе...
а именно: " AND mess.MessageFrom = sex.UserID AND mess.MessageFrom = u.UserID ". странная у тебя тут проверка идет... зачем делать так, чтобы у тебя 2 переменные имели то-же самое значение? "sex.UserID == u.UserID" ???!!! проверь это и передумай логику...
 

TRL

Новичок
что-бы как на мамбовских знакомтсвах сделать.. да и не удобно будет, если постоянно переключатся на входящие надо будет...

То старый запрос, который сейчас стоит... одразумевает од собой сразу же сбор всей информации о пользователе написавшем с двух таблиц!
 

dantistus

Новичок
Автор оригинала: TRL
Смотрим строки с MessageID равным 2 и 1.

Эти записи подразумевают под собой то, что сначало написал пользователь 1 пользователю 7, после пользователь 7 написал пользователю 1.

Должно выбираться только уникальные записи, т.е. без подобных повторений.
Вот это подробней, пожалуйста. Ты хочешь вывести список всех сообщений или список всех пользователей, или что?
 
Сверху