Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2017
Помог: 0 раз(а)
Всем привет, у меня есть таблица : messages
id | sender | taker | message | date | value
нужно вывести последние сообщения всех диалогов отсортированых по date
все перепробовал ничего придумать или найти не могу
OrmaJever
Отправлено: 15 Июня, 2017 - 00:51:38
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
мускуль?
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Vladimir Kheifets
Отправлено: 15 Июня, 2017 - 08:34:01
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Богдан Скуба пишет:
Всем привет, у меня есть таблица : messages
id | sender | taker | message | date | value
нужно вывести последние сообщения всех диалогов отсортированых по date
все перепробовал ничего придумать или найти не могу
Привет! Попробуйте так. Проверил. У меня работает.
SELECT message FROM messages WHERE date =(SELECT MAX(date)FROM messages)
Sail
Отправлено: 15 Июня, 2017 - 14:00:21
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
Vladimir Kheifets, и получите все сообщения за последнюю дату.
Добавьте связку соотнесенного подзапроса с отправителем или получателем сообщения, чтобы идентифицировать диалог. Учтя при этом, что отправитель или получатель в одном диалоге могут участвовать в других диалогах, с другими получателями или отправителями...
При этом допускаем, что (судя по структуре таблички) между парой отправитель-получатель может вестись только один диалог...
OrmaJever
Отправлено: 15 Июня, 2017 - 20:46:17
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
раз ответа я не услышал то вот запрос для постгреса, а дальше сами переделывайте
GROUPBY CASE WHEN sender > taker THEN taker ||'-'|| sender ELSE sender ||'-'|| taker END;
ORDERBY date DESC
LIMIT 10
)
ORDERBY date
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Мелкий
Отправлено: 15 Июня, 2017 - 22:56:01
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
OrmaJever, запрос именно в постгресе работать не будет в принципе даже после правки синтаксической ошибки. Пошлёт нафиг за попытку сортировки по неаггрегатному полю.
А вот mysql при должном старании по части sql_mode как раз прожуёт. Правда, со случайным результатом.
Ну и seqscan гарантированный, да.
Постгресу можно как-то так index scan сделать по индексу sender, taker, date:
это да, но это из-за условия, в идеале нужно отдельное поле для обозначения диалога
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Vladimir Kheifets
Отправлено: 18 Июня, 2017 - 08:52:50
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Sail пишет:
Vladimir Kheifets, и получите все сообщения за последнюю дату.
Добавьте связку соотнесенного подзапроса с отправителем или получателем сообщения, чтобы идентифицировать диалог. Учтя при этом, что отправитель или получатель в одном диалоге могут участвовать в других диалогах, с другими получателями или отправителями...
При этом допускаем, что (судя по структуре таблички) между парой отправитель-получатель может вестись только один диалог...
Из название поля "date" не следует, что тип поля также "date".
В данном случае, тип поля должен быть "datetime".
Исходя из этого я показал как найти последнее сообщение.
Конечно, Вы правы, что допускать можно всё, что угодно и если необходимо ставить дополнительные условия. MySQL справится.
Sail
Отправлено: 18 Июня, 2017 - 11:20:28
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
Vladimir Kheifets пишет:
Из название поля "date" не следует, что тип поля также "date".
В данном случае, тип поля должен быть "datetime".
Исходя из этого я показал как найти последнее сообщение.
Суть не в детализации времени (в день, в час, в секунду...), а в том, что требуется не одно последнее сообщение всех диалогов, а последнее сообщение для каждого диалога.
Vladimir Kheifets
Отправлено: 22 Июня, 2017 - 15:11:14
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Sail пишет:
Vladimir Kheifets пишет:
Из название поля "date" не следует, что тип поля также "date".
В данном случае, тип поля должен быть "datetime".
Исходя из этого я показал как найти последнее сообщение.
Суть не в детализации времени (в день, в час, в секунду...), а в том, что требуется не одно последнее сообщение всех диалогов, а последнее сообщение для каждого диалога.
Добрый день!
Прочтите, пожалуйста, вопрос, с корого началась тема:
Богдан Скуба пишет:
Всем привет, у меня есть таблица : messages
id | sender | taker | message | date | value
нужно вывести последние сообщения всех диалогов отсортированых по date
все перепробовал ничего придумать или найти не могу
Я понял так, что требуется "вывести последние сообщения всех диалогов", а не "последнее сообщение для каждого диалога".
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.