0

我有一个像 twitter 这样的数据库,它有用户和消息,用户可以订阅和阻止其他用户。我需要显示未被阻止的订阅用户的消息,所以我有一个这样的查询:

SELECT DISTINCT M.mid, M.author, M.content FROM Msgs M, Subs S, Blocks B
WHERE S.uid = 3 AND S.sub_uid = M.author AND B.uid = 3 AND M.author NOT IN
    (SELECT B2.bl_uid FROM Blocks B2 WHERE B2.uid = 3)
ORDER BY M.mid DESC LIMIT 30;

如果没有 'LIMIT 30' 查询工作正常,只给我正确的行,但使用 'LIMIT 30' 我有错误的结果,因为查询给了我正确的行加上属于订阅和阻止的用户的行。“限制”如何改变这个结果?

编辑: uid = 3 的用户订阅了另外 2 个用户,用户 5 和 6,用户 6 被阻止,所以我只需要显示来自用户 5 的消息,但是使用“LIMIT 30”来自用户 6 的消息也是回来。

4

1 回答 1

0

这里只是一个总猜测,但我发现自己想知道限制子句是否也应用于子查询,基本上只阻止Blocks表中的前 30 个作者。

尝试重构查询以避免使用子查询。

作为奖励,当您开始添加的不仅仅是少量数据时,您将消除MySQL 中子查询实现中固有的性能问题。

于 2013-05-05T00:59:27.413 回答