![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
всем привет. Такая проблемма: есть таблица с полями id(id сообщения), user_id(id юзера кто написал сообщение), user_to(id кому написали), mess(само сообщение), date, state(состояние сообщения). Вобщем мне нужно из этой таблицы вытащить все сообщения которые предназначенны для меня, в еденичном экзэмпляре(отсеять те, которые пришли от одного и тогоже юзера) с наибольшем ид. Если вы видели диалоги в вк, то мне надо сделать тоже самое. Мне нужно вывести список всех диалогов. Например
|--id--|--user_id--|--user_to--|--mess--|--date--|--state--|
|--1--|-----1-----|----2------|-привет-|--2012--|--wait---|
|--2--|-----1-----|----2------|-Как ты?|--2012--|--wait---|
|--3--|-----1-----|----3------|-Как ты?|--2012--|--wait---|
|--4--|-----1-----|----3------|-Бла бла|--2012--|--wait---|
Скрипт должен вернуть 4 строку и второю. Впринцыпе можно попробывать это реализовать на пхп, но если в бд 1000000000 сообщений? Жду ваших предложений и кодов. С уважением Николай.
Неактивен
mysql> create table t_6547(id int, user_id int, user_to int, mess varchar(255), date int); Query OK, 0 rows affected (0.55 sec) mysql> insert into t_6547 values(1,1,2,'hi',2012),(2,1,2,'how are you',2012),(3,1,3,'how are you',2012),(4,1,3,'bla bla',2012); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from t_6547; +------+---------+---------+-------------+------+ | id | user_id | user_to | mess | date | +------+---------+---------+-------------+------+ | 1 | 1 | 2 | hi | 2012 | | 2 | 1 | 2 | how are you | 2012 | | 3 | 1 | 3 | how are you | 2012 | | 4 | 1 | 3 | bla bla | 2012 | +------+---------+---------+-------------+------+ 4 rows in set (0.00 sec)
Получить id нужных Вам диалогов Вы можете так:
select max(id) from t_6547 where user_id = 1 group by user_to;
Нужные строки можно получить немного сложнее
select * from t_6547 JOIN ( select max(id) as id from t_6547 where user_id = 1 group by user_to) t USING(id);
Неактивен