Возвращает самые последние сообщения из MySQL?

#php #mysql #sql

#php #mysql #sql

Вопрос:

Мне нужно добавить соединение к следующему запросу, который соединит таблицу messages_message с таблицей messages_threads и вернет поля ‘body’ и ‘time’ из самой последней строки в messages_messages, где messages_message.threadid = messages_threads.id .

Извините, это так запутанно, я не знаю, как еще это сформулировать! Вот мой текущий запрос, который выдает все правильно, за исключением полей «тело» и «время».

 SELECT 
    messages_threads.id AS threadid, messages_threads.name AS recipientsname, 
    senderid, username AS sendername, pictures.url AS senderpicture
FROM 
    messages_recipients
    JOIN messages_threads 
        ON messages_threads.id = messages_recipients.threadid
    JOIN users 
        ON users.id = messages_threads.senderid
    JOIN pictures 
        ON messages_threads.senderid = pictures.userid 
        AND pictures.profile = 1
WHERE messages_recipients.userid = $userid
  

Ответ №1:

Вы могли бы добавить подзапрос к таблице messages_message, который возвращал бы 1 строку для каждого потока. Например:

 SELECT 
    messages_threads.id AS threadid, messages_threads.name AS recipientsname, 
    senderid, username AS sendername, pictures.url AS senderpicture
FROM 
    messages_recipients
    JOIN messages_threads ON messages_threads.id = messages_recipients.threadid
    JOIN users ON users.id = messages_threads.senderid
    JOIN pictures ON messages_threads.senderid = pictures.userid AND pictures.profile = 1
    JOIN ( SELECT threadid, MAX(id) AS postid FROM messages_message GROUP BY threadid ) t ON message_threads.id = t.threadid
    JOIN messages_message ON t.threadid = messages_message.threadid AND t.postid = messages_message.id
WHERE messages_recipients.userid = $userid
  

Ответ №2:

Я думаю, вам также понадобится группировка по телу и времени … или вы можете подробнее указать свой запрос..

Комментарии:

1. Привет, я еще не добавил join в messages_messages — я пытаюсь решить, как. Вы предлагаете подзапрос с group by?

2. Если вы знаете, что в таблице message_thread поле count или examine требуется so gruop by. в противном случае существует множество простых решений.

3. Ответ Джадды сработал, у вас есть более простое решение? Спасибо за помощь!

4. я думаю, что ответ judda подходит.