powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос диалогов
20 сообщений из 20, страница 1 из 1
Помогите составить запрос диалогов
    #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
Помогите составить запрос диалогов
    #38803347
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как все любят думать, что именно у них возникла совершенно оригинальная и никем ещё не решённая задача... иди ФАК читай!
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803357
Slays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, если есть решение, можешь кинуть ссылку, а не выставлять на показ свое пусто ЧСВ
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803364
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slaysесли есть решение, можешь кинуть ссылкуЕсли есть глаза и мозг, умеющий не только читать, но и осмысливать прочитанное, то достаточно прочитать всего 2(две) строки в списке тем, чтобы найти ту, в которой есть решение.
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803374
Slays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На каждом форуме полно псевдоумных пустословов, помочь не могут, но напишут кучу никому не нужных сообщений аля гугли сам.

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

Хотели бы помочь, сразу бы дали ссылку на страницу фака, как минимум, без лишнего пафоса. Страницу http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah я нашел, хотя и это вряд ли решит мою проблему, если бы я умел составлять сложные запросы, я бы давно это уже сделал.
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803447
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slaysесли бы я умел составлять сложные запросы, я бы давно это уже сделалну, выходов из этой ситуации ровно 2: 12553838
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803508
Slays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй раз прошу не флудить, задача от этого не решается, ЧСВ можно блеснуть в соседних топиках
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803605
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slaysзадача от этого не решаетсяПовторюсь - решение задачи осуществимо ровно двумя путями, расписанными по ссылке выше.
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38803732
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir , не мучайся. Есть категория индивидов, которые ничего не будут делать самостоятельно, пока остаётся ненулевая вероятность, что кто-то сделает это за них, и будут страшно возмущаться, что никто за них, таких хороших, не хочет поработать. Пока жизнь не даст по лицу - они неизлечимы.
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804522
Slays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бла бла бла и ничего полезного, я все делаю самостоятельно, но раз пришел на форум, мне нужна помощь, а не ваш флуд, надежда на адекватных пользователей, с которыми можно обсудить решение данной задачи, еще есть, ну а вы бы нашли себе занятие и не мешали
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804639
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slaysс которыми можно обсудить решение данной задачиТут, по-видимому, подразумевается путь 2 из вышеприведённой ссылки, однако сами посты, кроме первого, на следование по этому пути даже не намекают.
Slaysну а вы бы нашли себе занятие и не мешали"не говори, что мне делать, и я не скажу, куда тебе пойти" (с)
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804681
Slays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так кроме моего 1 сообщения никто еще и не пытался сказать что-то по делу, один холивар не по теме. Понятно откуда у вас по 23 тыс сообщений, толку то только ноль
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804699
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slaysникто еще и не пытался сказать что-то по делув первом и втором ответе всё сказали "по делу"
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804714
Slays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так если это все, что вы хотели сказать, можно уже перестать флудить ? Может тут другие пользователи есть с ЧСВ на уровне нормы, готовые к разбору задачи
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804722
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Прошу всех прекращать пикироваться. Вот вам делать нечего...

Slays,

Задача, действительно, решается с помощью топика из FAQ-а, насколько я ее бегло понял.
Детально расписать, сорри, некогда.
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #38804724
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slaysготовые к разбору задачимы готовы
к совместному разбору
а не кSlaysесли бы я умел составлять сложные запросы, я бы давно это уже сделал.
написанию запроса за вас
...
Рейтинг: 0 / 0
Помогите составить запрос диалогов
    #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
Помогите составить запрос диалогов
    #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
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос диалогов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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