Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос диалогов / 20 сообщений из 20, страница 1 из 1
12.11.2014, 12:45:15
    #38803339
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
У нас есть несколько диалогов с разными людьми - нужно вывести последнее сообщение каждого диалога. (как в ВК)

У нас есть 1 таблица с диалогами (в запросе не участвует):

Код: sql
1.
2.
3.
4.
`user_dialogue`
id | name
1 | Первый диалог
2 | Второй диалог



У нас есть таблица с участниками диалога (предположим, мы id_user = 1, т.е. состоим в 2 диалогах):

Код: sql
1.
2.
3.
4.
5.
6.
7.
`user_dialogue_members`
id | id_user | id_dialogue
1 | 1 | 1
2 | 5 | 1
3 | 1 | 2
4 | 15 | 2
...



У нас есть таблица непосредственно с сообщениями:

Код: sql
1.
2.
3.
4.
5.
6.
`user_dialogue_messages`
id | id_user | message | id_dialogue 
1 | 1 | Привет, как дела ? | 1
2 | 5 | Нормально | 1
3 | 1 | Привет, привет | 2
...



В результате мы должны получить вывод диалогов (поскольку мы id_user = 1):
- Нормально (от 5 участника)
- Привет, привет (наше сообщение)

В общем последнее сообщение каждого диалога, не важно, написали его нам или мы.

Следующий запрос у меня работает не корректно, диалоги группирует, но выводит не последние сообщения из диалога, а первые:

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
FROM `user_dialogue_members` AS `members`
LEFT JOIN `user_dialogue_messages` AS `messages`
ON `members`.`id_dialogue` = `messages`.`id_dialogue`
WHERE `members`.`id_user` = :id_user
GROUP BY `messages`.`id_dialogue`
ORDER BY `messages`.`id` DESC



Как сделать группировку по последним сообщениям ? Надеюсь задача ясна. Помогите разобраться.

Такой вот вариант

Код: sql
1.
2.
3.
4.
SELECT
 (SELECT `message` FROM `user_dialogue_messages` WHERE `id_dialogue` = `members`.`id_dialogue` ORDER BY `id` DESC LIMIT 1 ) AS `message`
FROM `user_dialogue_members` AS `members`                        
WHERE `members`.`id_user` = :id_user



выводит правильные сообщения, но как мне вывести из таблицы подзапроса `user_dialogue_messages` другие столбцы, помимо `message` ?

И вторая проблема, как мне в таком случае указать метод сортировки самих диалогов, чтобы и сами диалоги с наиболее свежими сообщениями были выше старых диалогов...
...
Рейтинг: 0 / 0
12.11.2014, 12:48:11
    #38803347
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Как все любят думать, что именно у них возникла совершенно оригинальная и никем ещё не решённая задача... иди ФАК читай!
...
Рейтинг: 0 / 0
12.11.2014, 12:52:52
    #38803357
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Akina, если есть решение, можешь кинуть ссылку, а не выставлять на показ свое пусто ЧСВ
...
Рейтинг: 0 / 0
12.11.2014, 12:58:51
    #38803364
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysесли есть решение, можешь кинуть ссылкуЕсли есть глаза и мозг, умеющий не только читать, но и осмысливать прочитанное, то достаточно прочитать всего 2(две) строки в списке тем, чтобы найти ту, в которой есть решение.
...
Рейтинг: 0 / 0
12.11.2014, 13:03:58
    #38803374
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
На каждом форуме полно псевдоумных пустословов, помочь не могут, но напишут кучу никому не нужных сообщений аля гугли сам.

Кто может помочь, поможет, остальных прошу не флудить
...
Рейтинг: 0 / 0
12.11.2014, 13:16:37
    #38803405
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysпомочь не могутвам уже 2 раза помогли
Slaysно напишут кучу никому не нужных сообщений аля гугли сам"может, тебе ещё и ключ дать от квартиры, где деньги лежатзапрос написать?"
ну вторая же тема форума!
там - прямо в названии - даже слова знакомые встречаются!
Slaysнужно вывести последнее сообщение
...
Рейтинг: 0 / 0
12.11.2014, 13:36:14
    #38803433
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Помощь, это когда дают ответ на поставленный вопрос или помогают его найти, а не бесполезный холивар. Я понимаю, что вы все тут "умные", но и вы должны понимать, что уровень знаний в данной сфере у всех разный, и то что вам уже кажется легким и очевидным, у других может вызывать трудности. Для этого и есть форум.

Хотели бы помочь, сразу бы дали ссылку на страницу фака, как минимум, без лишнего пафоса. Страницу http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah я нашел, хотя и это вряд ли решит мою проблему, если бы я умел составлять сложные запросы, я бы давно это уже сделал.
...
Рейтинг: 0 / 0
12.11.2014, 13:40:42
    #38803447
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysесли бы я умел составлять сложные запросы, я бы давно это уже сделалну, выходов из этой ситуации ровно 2: 12553838
...
Рейтинг: 0 / 0
12.11.2014, 14:07:31
    #38803508
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Второй раз прошу не флудить, задача от этого не решается, ЧСВ можно блеснуть в соседних топиках
...
Рейтинг: 0 / 0
12.11.2014, 14:51:43
    #38803605
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysзадача от этого не решаетсяПовторюсь - решение задачи осуществимо ровно двумя путями, расписанными по ссылке выше.
...
Рейтинг: 0 / 0
12.11.2014, 15:55:49
    #38803732
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
tanglir , не мучайся. Есть категория индивидов, которые ничего не будут делать самостоятельно, пока остаётся ненулевая вероятность, что кто-то сделает это за них, и будут страшно возмущаться, что никто за них, таких хороших, не хочет поработать. Пока жизнь не даст по лицу - они неизлечимы.
...
Рейтинг: 0 / 0
13.11.2014, 11:12:44
    #38804522
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Бла бла бла и ничего полезного, я все делаю самостоятельно, но раз пришел на форум, мне нужна помощь, а не ваш флуд, надежда на адекватных пользователей, с которыми можно обсудить решение данной задачи, еще есть, ну а вы бы нашли себе занятие и не мешали
...
Рейтинг: 0 / 0
13.11.2014, 12:11:48
    #38804639
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysс которыми можно обсудить решение данной задачиТут, по-видимому, подразумевается путь 2 из вышеприведённой ссылки, однако сами посты, кроме первого, на следование по этому пути даже не намекают.
Slaysну а вы бы нашли себе занятие и не мешали"не говори, что мне делать, и я не скажу, куда тебе пойти" (с)
...
Рейтинг: 0 / 0
13.11.2014, 12:28:06
    #38804681
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Ну так кроме моего 1 сообщения никто еще и не пытался сказать что-то по делу, один холивар не по теме. Понятно откуда у вас по 23 тыс сообщений, толку то только ноль
...
Рейтинг: 0 / 0
13.11.2014, 12:33:06
    #38804699
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysникто еще и не пытался сказать что-то по делув первом и втором ответе всё сказали "по делу"
...
Рейтинг: 0 / 0
13.11.2014, 12:39:35
    #38804714
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Ну так если это все, что вы хотели сказать, можно уже перестать флудить ? Может тут другие пользователи есть с ЧСВ на уровне нормы, готовые к разбору задачи
...
Рейтинг: 0 / 0
13.11.2014, 12:42:15
    #38804722
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Модератор: Прошу всех прекращать пикироваться. Вот вам делать нечего...

Slays,

Задача, действительно, решается с помощью топика из FAQ-а, насколько я ее бегло понял.
Детально расписать, сорри, некогда.
...
Рейтинг: 0 / 0
13.11.2014, 12:42:31
    #38804724
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Slaysготовые к разбору задачимы готовы
к совместному разбору
а не кSlaysесли бы я умел составлять сложные запросы, я бы давно это уже сделал.
написанию запроса за вас
...
Рейтинг: 0 / 0
13.11.2014, 13:27:18
    #38804790
Slays
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
В топике есть и ход решения и конкретные вопросы, загуглить, прочитать учебник и прочее я мог и без форума, но раз я пришел на форум, я ждал дискуссии и разбора задачи, а не предложений загуглить и прочитать учебник.

В общем конечный запрос у меня имеет такой вариант, может и не самый оптимальный, но работает.

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT `messages`.*
FROM `user_dialogue_messages` AS `messages`
LEFT JOIN `user_dialogue_members` AS `members`  
ON `messages`.`id_dialogue` = `members`.`id_dialogue`                       
WHERE `messages`.`id` IN (SELECT MAX(`id`) FROM `user_dialogue_messages` GROUP BY `id_dialogue`)
     && `members`.`id_user` = :id_user
ORDER BY `messages`.`id` DESC



Может кому пригодится это одно полезное сообщение из 20 флуда. Если у кого есть поправки, выслушаю, если по делу сказать нечего, лучше промолчите.
...
Рейтинг: 0 / 0
13.11.2014, 14:25:56
    #38804910
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос диалогов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT `messages`.*
FROM `user_dialogue_messages` AS `messages`
JOIN (SELECT MAX(`id`) maxid FROM `user_dialogue_messages` 
 WHERE `members`.`id_user` = :id_user
 GROUP BY `id_dialogue`
) idm ON `messages`.`id`=idm.maxid
LEFT JOIN `user_dialogue_members` AS `members`  
ON `messages`.`id_dialogue` = `members`.`id_dialogue`                       
WHERE `members`.`id_user` = :id_user
ORDER BY `messages`.`id` DESC

до 5.5 так будет быстрее
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос диалогов / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]