SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 15.02.2013 21:14:06

oleg000_som
Участник
Зарегистрирован: 15.02.2013
Сообщений: 3

Сложный запрос на выборку уникальных значений

Есть сообщения: входящие, исходящие. Необходимо построить запрос, который вытащит все последние сообщения из входящих и исходящих уникальные для каждого пользователя будь-то он в роли получателя или отправителя. Своего рода реализация "диалогов" на подобе  всеизвестной социальной сети "вконтакте".

вот какой я составил запрос, но он немного не то делает что требуется в идеале. Он вытаскивает только уникальные отправленные первые попавшие в таблице

$q = sprintf('SELECT m.id_msg, m.id_sender, m.id_receiver, m.theme, m.text_msg, m.date, m.fdr, m.fds, m.far, p.id_user, p.name, p.sename, p.mini_avatar FROM messages m INNER JOIN private_office p ON m.id_receiver=p.id_user WHERE m.id_sender="%d" AND m.fds="%d" GROUP BY m.id_receiver ORDER BY m.date DESC', $id_user, '0');


для пользователя с id_sender = 1 (текущий пользователь) он вытащил строки только 1 и 4 (см. прикрепленный файл)

Помогите составить нужный запрос.


Прикрепленные файлы:
Attachment Icon 112.png, Размер: 8,835 байт, Скачано: 299

Неактивен

 

#2 16.02.2013 01:32:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сложный запрос на выборку уникальных значений

FAQ №16

Неактивен

 

#3 17.02.2013 17:42:37

oleg000_som
Участник
Зарегистрирован: 15.02.2013
Сообщений: 3

Re: Сложный запрос на выборку уникальных значений

Все таки до конца еще не разобрался с этим вопросом: пока есть рабочий запрос на выборку последних входящих сообщений от уникальных пользователей в порядке убывания. Вот что у меня получилось:


SELECT m.id_msg, m.id_sender, m.theme, m.text_msg, m.date, m.fdr, m.fds, m.far, p.id_user, p.name, p.sename, p.mini_avatar FROM messages m
        JOIN (SELECT id_sender, max(date) AS mdate FROM messages GROUP BY id_sender) AS m2
        ON m.id_sender=m2.id_sender AND m.date=m2.mdate    
        JOIN private_office p
        ON m.id_sender=p.id_user    
        WHERE m.id_receiver = "%d" AND m.fdr="%d" GROUP BY m.id_sender ORDER BY m.date DESC
 

Нужно еще додуматься как туда впихнуть "Исходящие".
Вот как выглядят мои исходящие:
SELECT m.id_msg, m.id_receiver, m.theme, m.text_msg, m.date, m.fdr, m.fds, m.far, p.id_user, p.name, p.sename, p.mini_avatar FROM messages m INNER JOIN private_office p ON m.id_receiver=p.id_user WHERE m.id_sender="%d" AND m.fds="%d" ORDER BY m.date DESC

И входящие:
SELECT m.id_msg, m.id_sender, m.theme, m.text_msg, m.date, m.fdr, m.fds, m.far, p.id_user, p.name, p.sename, p.mini_avatar FROM messages m INNER JOIN private_office p ON m.id_sender=p.id_user WHERE m.id_receiver="%d" AND m.fdr="%d" ORDER BY m.date DESC

Отредактированно oleg000_som (17.02.2013 17:49:31)

Неактивен

 

#4 17.02.2013 20:25:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сложный запрос на выборку уникальных значений

oleg000_som написал:

Все таки до конца еще не разобрался с этим вопросом: пока есть рабочий запрос на выборку последних входящих сообщений от уникальных пользователей в порядке убывания. Вот что у меня получилось:


SELECT m.id_msg, m.id_sender, m.theme, m.text_msg, m.date, m.fdr, m.fds, m.far, p.id_user, p.name, p.sename, p.mini_avatar FROM messages m
        JOIN (SELECT id_sender, max(date) AS mdate FROM messages GROUP BY id_sender) AS m2
        ON m.id_sender=m2.id_sender AND m.date=m2.mdate    
        JOIN private_office p
        ON m.id_sender=p.id_user    
        WHERE m.id_receiver = "%d" AND m.fdr="%d" GROUP BY m.id_sender ORDER BY m.date DESC
 

А зачем здесь второй раз group by?

oleg000_som написал:

Нужно еще додуматься как туда впихнуть "Исходящие".

union ?
http://dev.mysql.com/doc/refman/5.5/en/union.html

Неактивен

 

#5 17.02.2013 20:30:14

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сложный запрос на выборку уникальных значений

Посмотрите ещё http://sqlinfo.ru/forum/viewtopic.php?id=3982

Неактивен

 

Board footer

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