Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Помогите, пожалуйста, разобраться. Делаю чат. Задача - вывести список всех пользователей, с кем ведется разговор. Причем последние диалоги должны быть вверху. Ниже приведенный код получает список всех моих диалогов, вот только строка "GROUP BY companion" не учитывает ранее заданного "ORDER BY `messes_date` DESC". Как можно получить список companion с учетом последних переписок? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Сам возпрос возвращает Без использования GROUP BY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:25 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
Не привязались картинки, потому, дам просто ссылки на их: Сам возпрос возвращает https://prnt.sc/h359rl Без использования GROUP BY http://prntscr.com/h35ay5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:29 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
vah-smileЗадача - вывести список всех пользователей, с кем ведется разговор. Причем последние диалоги должны быть вверху. список пользователей это дно, а список диалогов совсем другое. Ты пытаешься отсортировать по полю, которого нет в группировке. ORDER BY maх(`messes_date`) GROUP BY companion ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2017, 07:33 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
982183, Без использования GROUP BY я получаю результат как на картинке. А как обьеденить теперь наши записи по полю companion с учетом даты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 15:55 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
vah-smileпоследние диалоги должны быть вверху.Что такое "последний диалог"? Если верить скриншоту, то нужны все диалоги, причём из каждого - последнее по времени сообщение. Если так - то вполне достаточно было прочитать FAQ: Выборка первой/последней записи в группах . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:12 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
Akina, Последний диалог - это последняя переписка. Поле companion - это ID-собеседника. При использовании GROUP BY companion - идет сортировака по companion (без учета даты добавления сообщения - messes_date). Проблема заключаеться в том, что у меня только одна таблица. Поле companion - я формирую в запросе исходя со значений messes_to и messes_from Эту статью я видил, но что-то никак не пойму, как это реализовать у себя в БД... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:24 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
vah-smileБез использования GROUP BY я получаю результат как на картинке. Я не предлагал отказаться от GROUP BY Я предлагал применить агрегирующую функцию maх(`messes_date`) И всё же не понятен конечный результат. "Задача - вывести список всех пользователей, с кем ведется разговор" Я понял как таблица с полями идентифицирующими пользователя + по каждому пользователю дату/время последнего сообщения. В приводимом тобою примере/результате слишком много полей. В простейшем виде решение элементарно SELECT companion, max(messes_date) FROM messes ORDER BY max(messes_date) GROUP BY companion Но твоя задача очевидно иная, и пока ты её не сформулируешь, никто помочь тебе не сможет. Хотя в примере Akina изложен весь механизм решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 02:26 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
vah-smileПоследний диалог - это последняя переписка.Переписка - это, как я понимаю, диалог с одним респондентом. Скриншот же показывает иное - для каждого респондента одна, последняя по времени, запись. vah-smileПоле companion - это ID-собеседника.Так эти данные есть в паре полей (messes_from, messes_to). К чему такое дублирование? vah-smileне пойму, как это реализовать у себя в БД...В Вашем случае группа - это совокупность записей по паре полей (messes_from, messes_to). Для обеспечения однозначности (перестановки) это может быть, например, Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 07:57 |
|
||
|
ORDER BY + GROUP BY
|
|||
|---|---|---|---|
|
#18+
Akina, Та все не то. Проблема в том, что GROUP BY групирирует записи без учета времени добавления. Параметр ORDER BY - не влияет на GROUP BY. А MAX(`messes_id`) - возвращает только одину последнюю запись. В общем, результат выборки должен быть как на рисунке 20912496 , а у нас сейчас https://prnt.sc/h359rl (сортировака идет по полю companion, а все остальные поля не являются последними для companion) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 21:37 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39543889&tid=1830300]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 145ms |

| 0 / 0 |
