我正在处理一个关于从两个 MySQL 表中选择数据的问题。
First table holds messages | messages | (id, msg_group_id, to_user_id, from_user_id, datetime)
Second table holds user data | profiles | (user_id, name, firstname, ...)
ATM 的工作方式是,我可以选择 ALL 具有特定“to_id”的消息,并通过添加 JOIN 语句获取发送消息的用户的姓名和名字。
我现在的问题是我想不出一种方法来仅选择某个 msg_group_id 的最新消息。
我已经尝试过 GROUP BY msg_group_id 结合 ORDER BY datetime DESC。
但这只会抛出消息表中的第一个条目。但我想最后一个。 :-)
我希望你能帮助我。 :-)
我的实际 SQL 语句:
SELECT LEFT(messages.message, 10) AS message,
`messages`.`msg_group_id`,
`messages`.`datetime`,
`profiles`.`name`,
`profiles`.`firstname`
FROM `messages`
LEFT JOIN `profiles`
ON `messages`.`from_user_id` = `profiles`.`user_id`
WHERE `to_user_id` = '2'
ORDER BY `datetime` DESC
LIMIT 20;
提前致谢
示例输入:
[消息]
|id|msg_group_id|to_user_is|from_user_id|message |datetime|
0 | 1 | 1 | 2 | Hello World1 | 2015-12-21 10:42:00
1 | 1 | 1 | 2 | Hello World2 | 2015-12-21 10:43:00
2 | 1 | 1 | 2 | Hello World3 | 2015-12-21 10:44:00
[个人资料]
user_id|name |firstname|
1 | Test | User
2 | Thanks | Worldname
结果(我不想要的)
message|msg_group_id|datetime|name|firstname
Hello World1 | 1 | 2015-12-21 10:42:00 | Thanks | Worldname
结果(我想要的)
message|msg_group_id|datetime|name|firstname
Hello World3 | 1 | 2015-12-21 10:44:00 | Thanks | Worldname
最佳答案
这个查询可能有帮助:
SELECT m.message, m.msg_group_id, m.datetime, u.name, u.firstname
FROM message as m, profiles as u
WHERE m.from_user_id = u.user_id
GROUP BY m.msg_group_id
ORDER BY m.datetime DESC
或者使用INNER JOIN
SELECT m.message, m.msg_group_id, m.datetime, u.name, u.firstname
FROM message as m
INNER JOIN profiles as u ON m.from_user_id = u.user_id
GROUP BY m.msg_group_id
ORDER BY m.datetime DESC
关于mysql - PHP MySQL SELECT 最新条目按 ID 分组并按时间戳排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34392581/