我有一个像 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 的消息也是回来。