2015-11-12 5 views
0

Итак, у меня есть запрос, который выбирает 1 сообщение от каждого пользователя, упорядоченного по дате DESC, но выбирает первое сообщение для каждой группы. Мне нужно выбрать последнее сообщение по дате из каждая группа (каждый пользователь) Это мой запрос:Выбор последней записи из INNER JOIN и группировки

SELECT  people.id, 
      people.avatar, 
      people.firstname, 
      people.lastname, 
      LEFT(messages.message, 90) AS message, 
      messages.seen, 
      messages.date 
FROM  people 
INNER JOIN messages 
ON   people.id = messages.sender_id 
WHERE  reciever_id = '". $user_data['id'] ."' 
GROUP BY sender_id 
ORDER BY date DESC limit 11 
+0

Этот запрос не сгруппирован по дате. Он сгруппирован по sender_id. Он не показывает первое сообщение каждой группы. Он отображает все сообщения в порядке убывания даты. – kainaw

+0

Typo sorry, il correct it – Champa

ответ

0

Пожалуйста, простите мой синтаксис, если он откусил, но я бы, вероятно, попробовать что-то вроде этого.

SELECT people.id, 
     people.avatar, 
     people.firstname, 
     people.lastname, 
     LEFT(msg.message, 90) AS message, 
     msg.seen, 
     msg.date 
FROM people 
INNER JOIN (SELECT message, seen, date, sender_id 
       FROM messages GROUP By sender_id 
       ORDER By date DESC LIMIT 1) msg 
       ON people.id = msg.sender_id 
WHERE  reciever_id = '". $user_data['id'] ."' 
+0

Я получаю # 1054 - Неизвестный столбец в 'Полевом списке' – Champa

+0

Вы тестируете его непосредственно против базы данных без этого предложения where? – Hrafe

+0

Нет, «WHERE» находится в запросе – Champa

Смежные вопросы