我的sql生锈了。我需要选择30条最新消息(具有30个最大ID的消息),然后使用sender_id
加入users表id
。
在英语中,我想要发送最近30条消息的用户。
这是我的查询(不运行):
SELECT * FROM group_messages
WHERE group_id=52
ORDER BY id DESC
LIMIT 30
LEFT JOIN users
ON users.id=group_messages.sender_id
如果对这种查询有更好的方法,那么无论如何。
注意:第一部分用于选择30条最新消息。当我尝试加入users表时遇到了麻烦。 (我刚刚意识到即使这个查询确实运行了,我还是需要添加GROUP BY users.id
,用户可能已经发送了30条最新消息中的1条以上。
答案 0 :(得分:2)
JOIN
条款必须先于WHERE
,ORDER BY
和LIMIT
SELECT DISTINCT id
FROM (
SELECT u.id
FROM group_messages AS g
INNER JOIN users AS u on u.id = g.sender_id
WHERE group_id = 52
ORDER BY id DESC
LIMIT 30) AS x
我把它放在子查询中,然后我可以执行DISTINCT
选择。如果你在同一个查询中执行此操作,它将在选择最近的30行之前删除重复项,因此您将获得30个最新发件人,而不是30个最新邮件的发件人。
我怀疑你真的需要一个LEFT JOIN
而不是INNER JOIN
。只有当邮件的发件人ID不在users
时才需要。