我正在尝试使用以下语句来获取登录用户的消息列表。问题是尽管使用组和顺序,但它并不总是显示最新的消息。有人能解释一下吗?我应该使用子查询吗?
SELECT
messages.message_id,
messages.message_parent_id,
messages.message_project_id,
messages.message_from_id,
messages.message_from_email,
messages.message_subject,
messages.message_body,
messages.message_sent_datetime,
CONCAT(
u_from.forename,
' ',
u_from.surname
) AS from_x,
GROUP_CONCAT(
CONCAT(
u_to.user_id,
'||',
u_to.forename,
' ',
u_to.surname
)
) AS to_x,
m_recipients.recipient_message_read
FROM
messages
INNER JOIN users AS u_from
ON messages.message_from_id = u_from.user_id
INNER JOIN message_recipients AS m_recipients
ON messages.message_id = m_recipients.recipient_message_id
INNER JOIN users AS u_to
ON m_recipients.recipient_user_id = u_to.user_id
WHERE (
m_recipients.recipient_user_id = '$current_user_id'
OR messages.message_from_id = '$current_user_id'
)
AND messages.message_project_id = '$project_id'
GROUP BY messages.message_parent_id
ORDER BY messages.message_sent_datetime DESC
fiddle :http://sqlfiddle.com/#!9/7fbfa/3
最佳答案
你确定不需要吗?
按 messages.message_parent_id、message.message_id 分组
如果您确定将 messages.message_sent_datetime
替换为
MAX(messages.message_sent_datetime) as message_sent_datetime,
...
ORDER BY message_sent_datetime
或
MIN(messages.message_sent_datetime) as message_sent_datetime,
...
ORDER BY message_sent_datetime
好的,试试 this way :
SELECT
messages.message_id,
messages.message_parent_id,
messages.message_project_id,
messages.message_from_id,
messages.message_from_email,
messages.message_subject,
messages.message_body,
MAX(messages.message_sent_datetime) AS message_sent_datetime,
messages.message_important,
u_from.from_x,
GROUP_CONCAT(u_to.to_x),
m_recipients.recipient_message_read
FROM
messages
INNER JOIN (
SELECT
user_id,
CONCAT(forename,' ',surname) AS from_x
FROM users
) AS u_from
ON messages.message_from_id = u_from.user_id
INNER JOIN message_recipients AS m_recipients
ON messages.message_id = m_recipients.recipient_message_id
INNER JOIN
(SELECT
user_id,
CONCAT(user_id,'||',forename,' ',surname) AS to_x
FROM users
) AS u_to
ON m_recipients.recipient_user_id = u_to.user_id
WHERE (
m_recipients.recipient_user_id = 1
OR messages.message_from_id = 1
)
AND messages.message_project_id = 1
GROUP BY messages.message_parent_id
ORDER BY messages.message_sent_datetime DESC
关于mysql - 使用 GROUP BY、ORDER BY、GROUP_CONCAT 获取最旧的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29237861/