选择最近的条目并加入另一个表

时间:2015-03-03 01:17:13

标签: mysql

我的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条以上。

1 个答案:

答案 0 :(得分:2)

JOIN条款必须先于WHEREORDER BYLIMIT

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时才需要。