PHP / SQL: выберите один для dialog_id - PullRequest
2 голосов
/ 07 ноября 2010

Хорошо, в моем списке доходов PM я имею это:

$queryIn = "SELECT * FROM users_pm_in WHERE uID = '$USER' ";

Взять все запросы и показать их. Теперь каждый раз, когда пользователь создает PM, он создает номер «dialog_id». Если получатель ответит на PM пользователя, он также будет иметь этот номер в dialog_id.

Так вот почему я хотел бы показать только 1 запись в доходе на каждый dialog_id. Как это выглядит в users_pm_in:

id | uID | bID | msg | dialog_id
--------------------------------
 1 | 1 | 2 | Hello | 1
 2 | 2 | 1 | Hi? | 1
 3 | 1 | 2 | Wazzaa? | 1

uID - это тот, кто получает сообщение, bID - это пользователь, который его отправил, msg - это сообщение, dialog_id показывает, что они пишут в одном и том же диалоговом окне (они ответили друг другу).

Так что, если у меня id 1, в моем списке доходов у меня будет 2 записи прямо сейчас, с запросом выше.

То, что я хочу получить, это только 1, если это один и тот же диалог (dialog_id и тот же bID)

И 1, который он показывает, должен быть один порядок по дате desc

Ответы [ 2 ]

0 голосов
/ 07 ноября 2010

Я думаю, что проблема в том, что вы не можете гарантировать, какая строка MySQL вернется после оператора GROUP BY - вы хотите, чтобы она возвращала строку с самой «высокой» (то есть самой последней) датой, но в данный момент она может не обязательно вернуть это. Соответственно:

SELECT *, MAX(date) FROM users_pm_in WHERE uID = '$USER' GROUP BY dialog_id ORDER BY date DESC
0 голосов
/ 07 ноября 2010
SELECT * FROM users_pm_in WHERE uID = '$USER' GROUP BY dialog_id ORDER BY id DESC
...