【发布时间】:2020-04-18 16:22:04
【问题描述】:
我正在构建一个查询,该查询应返回 $userId 及其关注的用户的最后 10 个帖子(默认排序)。
带有查询的最小示例的 SQL Fiddle:https://www.db-fiddle.com/f/i5ByFAXwADj5pfjCTn1g1m/2
数据库结构非常简单:
posts (id, root, user, content)
users (id, username)
following (user_id, followed)
这是我目前用来获取所有帖子的查询:
SELECT posts.id, posts.content, users.id AS user_id, users.username
FROM posts
LEFT JOIN users ON posts.user = users.id
WHERE LIMIT 10
查询正在运行,但它不加区别地列出了每个用户的帖子。
这是我构建的查询,用于排除 $userId 未关注的用户的帖子,但不包括 $userId 自己的帖子:
SELECT posts.id, posts.content, users.id AS user_id, users.username
FROM following
LEFT JOIN posts ON posts.user = '$userId' OR posts.user = following.followed
LEFT JOIN users ON posts.user = users.id
WHERE (following.user_id = '$userId' OR following.user_id = NULL) LIMIT 10
我尝试用INNER JOIN 和RIGHT JOIN 替换LEFT JOIN posts,但没有成功。我找不到错误,为什么查询中没有包含$userId 的帖子?
我也尝试过从帖子中选择并加入关注者,但它返回了重复的内容:
SELECT posts.id, posts.content, users.id AS user_id, users.username
FROM posts
LEFT JOIN following ON following.user_id = '$userId'
LEFT JOIN users ON posts.user = users.id
WHERE (posts.user = '$userId' OR posts.user = following.followed)
LIMIT 10;
【问题讨论】:
-
完成@Strawberry db-fiddle.com/f/tao9a2gtpo9brgCwkKN3PJ/1
-
那么这包括想要的结果吗?
-
@HAlex 它看起来不像是一个 minimal 示例 :) MCRE 仅包含对证明问题很重要的内容。
-
@HAlex 明白了。十条全是别人已经回答的。但是我已经添加了不同的观点,顺其自然吧:)