Mysql 同时使用ORDER BY、GROUP BY和multiple SELECT
我有两张桌子 表用户Mysql 同时使用ORDER BY、GROUP BY和multiple SELECT,mysql,Mysql,我有两张桌子 表用户 uid | username ---------------- 1 | brandon 2 | john 3 | nicole 表2.1.1-1-1-1 id | from | to | message | time ------------------------------------------- 1 | 1 | 2 | hi sister | 100 2 | 1 | 3 | h
uid | username
----------------
1 | brandon
2 | john
3 | nicole
表2.1.1-1-1-1
id | from | to | message | time
-------------------------------------------
1 | 1 | 2 | hi sister | 100
2 | 1 | 3 | hi brother | 300
3 | 1 | 2 | hi again! | 400
4 | 2 | 3 | lolz message | 600
(column time是一个实际的时间戳,我只是简化了这个示例)
“from”是用户的uid
“to”是用户的uid
我想从发送给特定用户的所有用户处获取最新消息
本例中的特定用户是
$logged_id = 2;
结果应返回id为3的行
我到目前为止有什么疑问
SELECT private_msgs.*, users.username FROM `private_msgs`, `users`
WHERE private_msgs.to=$logged_id AND users.uid = private_msgs.from
INNER JOIN (
SELECT
from, max(time) as latest
FROM private_msgs
GROUP BY private_msgs.from
) r ON private_msgs.time = r.latest AND private_msgs.from = r.from
ORDER BY time DESC");
然而,我得到了错误
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN ( SELECT from, max(time) as latest FROM private_msgs ' at line 3
查询中有几个错误。除了尾随逗号之外,
from
和to
都是保留字,因此它们应该被引用:
SELECT pm.*, u.username
FROM `private_msgs` pm join
`users` u
on pm.`to` = $logged_id AND u.uid = pm.`from` INNER JOIN
(SELECT `from`, max(time) as latest
FROM private_msgs
GROUP BY private_msgs.`from`
) r
ON pm.time = r.latest AND pm.`from` = r.`from`
ORDER BY time DESC;
在这里,您将收到来自所有用户的最新消息。这是对您的answesr的查询
SELECT * FROM
(SELECT * FROM `user` a,` private_msgs` b
WHERE a.uid=b.from order by time DESC )
t group by `from`
这个问题经常被问到。