SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.03.2013 18:11:54

Анохин Николай
Участник
Зарегистрирован: 16.03.2013
Сообщений: 1

сложный GROUP BY

всем привет. Такая проблемма: есть таблица с полями 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 сообщений? Жду ваших предложений и кодов. С уважением Николай.

Неактивен

 

#2 17.03.2013 19:57:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2423

Re: сложный GROUP BY

Код:

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);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson