Задавайте вопросы, мы ответим
Вы не зашли.
Доброго всем дня!
Пробую писать скрипт приватных сообщений в виде диалогов и впервые столкнулся с запросом , устройство, которого не совсем мне понятно.
Помогите плиз составить его!
Есть таблица table_pm в ней столбцы :
user – логин написавшего
user_from – id получателя
text – само сообщение
data – дата
+---+------+----------+-------+---------+
| id | user |user_from | text | data |
+---+------+----------+-------+---------+
| 1 | name1 | 1 | текст | 01.01.12 |
| 2 | name2 | 3 | текст | 02.01.12 |
| 3 | name3 | 1 | текст | 03.01.12 |
| 4 | name4 | 3 | текст | 04.01.12 |
| 5 | name6 | 5 | текст | 05.01.12 |
| 6 | name2 | 3 | текст | 05.01.12 |
+--+-------+---------+--------+---------+
Мне надо выбрать имена пользователей (user) написавших сообщение пользователю с id 3 (user_from=3), но есть одно но, имена при выборке не должны повторяться и выводится по дате последнего сообщения.
Составил следующий запрос:
$query_pm=mysql_query("SELECT id, user, user_from, text, data FROM table_pm WHERE table_pm.user_from='3' ORDER BY date DESC LIMIT 10");
При выводе в цикл получается, что строки с одинаковыми именами (user) повторяются!
Как избавится от предыдущих строк с одинаковыми именами по дате последнего сообщения?
Отредактированно lidervik (28.04.2012 17:34:08)
Неактивен
Решено!
Помогла тема: http://sqlinfo.ru/forum/viewtopic.php?id=5340
Но хотелось бы услышать мнение опытных пользователей:
$query_pm=mysql_query("SELECT * FROM (SELECT * FROM table_pm WHERE user_from='3' ORDER BY data DESC) AS table_pm GROUP BY user"); cq();
Неактивен
А не проще ли SELECT `user`, max(`data`) FROM `table_pm` WHERE `user_from` = 3 GROUP BY `user`;?
Если нужно, чтобы сортировка шла по дате, то добавьте ORDER BY 1 ASC или ORDER BY 1 DESC
Неактивен
deadka написал:
А не проще ли SELECT `user`, max(`data`) FROM `table_pm` WHERE `user_from` = 3 GROUP BY `user`;?
Спасибо, обязательно попробую сменить запрос!
Неактивен
Остановился на запросе из поста #2 добавил таблицу пользователей и в итоге получилось следующий запрос:
Отредактированно lidervik (05.05.2012 17:24:54)
Неактивен
1. Скажите, есть ли какой-то сакральный смысл в том, чтобы делать подзапросом с последующей
группировкой? Может, просто утащить группировку внутрь (заодно избавившись от лишней сорти-
ровки внутри?)
2. Если Вы ищете status='send', то не удивительно, что запрос не находит status='receive'?
Неактивен