SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 17.05.2012 23:20:06

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Помогите составить запрос по выборке данных

Здравствуйте есть таблица MESSAGES
В ней поля id, sender, addressee message, date
В поля sender и addressee записываются ID пользователей.
sender ид отправителя
addressee ид получателя

Мне нужно что бы при выборке выводило лишь по одной записи из всей переписки с пользователями
То есть 1 пользователь переписывается с другим пользователем
id | sender | addressee |             message           | date
1       2             1           привет                          10.05.12
2       1             2           и тебе привет                11.05.12
3       2             1           как дела                       11.05.12
4       1             2           нормально                     11.05.12

Я пытался сформировать запрос так но он выдает не правильные данные он выводит все данные.


$t = "SELECT * FROM `" . DB_PREFIX . "messages` WHERE `sender`='%d' OR `addressee`='%d' GROUP BY `addressee`";
$result = mysql_query ( sprintf ( $t, mysql_real_escape_string ( 1 ),
                                        mysql_real_escape_string ( 1 ) ));
 
 


Пользователь с ID 2 зашёл на сайт в свои сообщения и он должен видеть все свои переписки с разными пользователями
То есть должно вывести по 1 записи из каждой переписки с разными пользователями этого пользователя
И уже при нажатии на выбранную переписку открываться вся переписка с выбранным пользователем.

Чтобы было вот так: как на скрине

На скрине добавлены дополнительные возможности подсчёт количества сообщений всего и новых но это уже мелочи. Самое сложное это сделать этот запрос.

Подскажите как это реализовать?

Отредактированно gheka (17.05.2012 23:23:21)


Прикрепленные файлы:
Attachment Icon 1111111.gif, Размер: 5,939 байт, Скачано: 259

Неактивен

 

#2 17.05.2012 23:32:03

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

Re: Помогите составить запрос по выборке данных

Здравствуйте.

Если по одному любому сообщению (в данном случае выбираем по отправителю), то можно так:
SELECT sender, max(message) FROM `messages` GROUP BY `sender`;
по приёмщику:
SELECT addressee, max(message) FROM `messages` GROUP BY `addressee`;

Если нужно и то и то - соедините результаты через union.


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

Неактивен

 

#3 18.05.2012 01:12:42

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Помогите составить запрос по выборке данных

Да хороший пример, но есть проблемка, повторения записей как сделать так чтобы убрать повторяющиеся записи из выборки

То есть если

id | sender | addressee |             message           | date
1       2             1           привет                          10.05.12
2       1             2           и тебе привет                11.05.12

выводит 2 раза то есть оба сообщения? Хотя в первом отправитель ид 2 а во втором случае получатель ид 2

Неактивен

 

#4 18.05.2012 01:18:01

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

Re: Помогите составить запрос по выборке данных

Прочтите до конца этот топик.


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

Неактивен

 

#5 18.05.2012 02:17:29

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Помогите составить запрос по выборке данных

Спасибо но тот пример схож но структура баз очень разные и из его решения построить на моём примере я не представляю как так как сам не совсем знаком mysql.
Если вам не сложно допишите пожалуйста.


$t = "SELECT * FROM `" . DB_PREFIX . "messages` WHERE `sender`='%d' GROUP BY `addressee` UNION SELECT * FROM `" . DB_PREFIX . "messages` WHERE `addressee`='%d' GROUP BY `sender`";
$result = mysql_query ( sprintf ( $t, mysql_real_escape_string ( 1 ),
                         mysql_real_escape_string ( 1 ) ));

 

Неактивен

 

#6 18.05.2012 10:48:55

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Помогите составить запрос по выборке данных

Решил проблему всё оказалось намного проще.

Вот решение всей проблемы. Может каму пригодится.


$t = "SELECT * FROM `" . DB_PREFIX . "messages` WHERE `sender`='%d' OR `addressee`='%d' GROUP BY `sender`+`addressee`";
$result = mysql_query ( sprintf ( $t, mysql_real_escape_string ( 1 ),
                         mysql_real_escape_string ( 1 ) ));

 

Неактивен

 

Board footer

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