Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение последней записи при группировке. Вывод диалогов сообщений. 
V
    Опции темы
Elfet
Дата 25.7.2011, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Всем привет! Прошу помощи разобраться в том как сделать следующее.


Есть таблица с сообщениями:
Код

message_id    message_user_id    message_sender_id    message_text    message_date
3    72589    72590    Hi Elfet! Its test123!    2011-07-22 15:35:36
5    72590    72589    Hi! I am Elfet;    2011-07-22 19:15:57
6    72589    72590    Ou. Realy?    2011-07-22 19:16:44
7    72590    72589    YES!    2011-07-22 19:22:23
9    72590    72589    ПРИВЕТ! ЭТО ELFET!    2011-07-25 12:23:14
10    72589    72591    Hi from Explorer!!!!    2011-07-25 13:12:43


Нужно сгруппировать сообщения по диалогам и вывести последнее сообщение.

Код

9    72590    72589    ПРИВЕТ! ЭТО ELFET!    2011-07-25 12:23:14
10    72589    72591    Hi from Explorer!!!!    2011-07-25 13:12:43



Я пробую делать так:
Код

SELECT * FROM `messages` WHERE `message_user_id`=72589 GROUP BY message_sender_id, message_user_id ORDER BY message_date DESC


Однако получаю вместо этого 
Код

10    72589    72591    Hi from Explorer!!!!    2011-07-25 13:12:43
3    72589    72590    Hi Elfet! Its test123!    2011-07-22 15:35:36


То есть первое сообщение из группы. 

Как получить последнее? Заранее спасибо!


--------------------
PM MAIL WWW Skype   Вверх
Akina
Дата 25.7.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Получить ID последней в каждой группе записи (having message_date=max(message_date)) в подзапросе.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 25.7.2011, 14:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  25.7.2011,  14:09 Найти цитируемый пост)
having message_date=max(message_date)

 smile  smile 
не выспался?  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 25.7.2011, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



ну... да, а что?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Elfet
Дата 25.7.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Нет, это не работает :(


--------------------
PM MAIL WWW Skype   Вверх
Zloxa
Дата 25.7.2011, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @ 25.7.2011,  18:26)
ну... да, а что?

Ну дык это... Если ты не группиируешься по message_date, ты не можешь его использовать в хавинге без аггрега....


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 25.7.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Elfet, прошу прощения, но этот вопрос уже на столько уже оскомину набил, как и вопрос "как разместить иконку где часики" в формах по делфе. 

Классическое решение:
Код

select t.*
from messages t
inner join (
SELECT  message_sender_id, message_user_id,max(message_date ) max_message_date 
FROM `messages` 
GROUP BY message_sender_id, message_user_id 
) s
on t.message_sender_id = s.message_sender_id and t.message_user_id = s.message_user_id and t.message_date  = s.max_message_date 

Однако такой запрос даст более одного результата, если окажется более одного поста на одну дату, обычно так не нужно, нужен обычно один пост, обычно по наибольшему pk.
Чтобы добиться такого, поищите по форму по клюевому слову "бабушкин метод".
Для мйскл, в частности, можно попробовать еще такой трюк(при условии что message_id- PK):
Код

select * 
form messages 
where message_id in 
(select  (select message_id 
               from messages s 
               where s.message_sender_id = t.message_sender_id and s.message_user_id = t.message_user_id 
               order by message_date desc 
               limit 1
       ) max_date_message_id
from (
  SELECT  message_sender_id, message_user_id
  FROM `messages` 
  GROUP BY message_sender_id, message_user_id 
  ) t 
)  


Это сообщение отредактировал(а) Zloxa - 25.7.2011, 19:46


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Elfet
Дата 26.7.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Всё оказалось как-то уж очень сложно. Ещё мне посоветовали почитать про cross apply. Но я думаю сделаю через ещё одну дополнительную таблицу (диалоги/топики)


--------------------
PM MAIL WWW Skype   Вверх
Zloxa
Дата 26.7.2011, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Elfet @  26.7.2011,  15:23 Найти цитируемый пост)
сделаю через ещё одну дополнительную таблицу 

Да, так - лучше.
Цитата(Elfet @  26.7.2011,  15:23 Найти цитируемый пост)
 Ещё мне посоветовали почитать про cross apply. 

Совет хороший, почитать стоит. Только применительно к вашей ситуации - бесползеный. У вас другая платформа.
Если хотите, посоветую почитать про keep или row_number(). Ими тоже можно получить желаемое, но не на MySQL.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.