为简单起见,我们假设我们为所有用户提供单一Feed 。
Feed只是文章列表 每个用户都可以免费收藏某个文章,或将其从个人视图中删除。
用户删除文章不会影响其他用户;每个用户都有自己的Feed视图。
我设计的一个天真的计划如下:
(当然,在实际应用中,用户 - 文章关系不仅仅是隐藏或主演。)
看起来在第一次更改选项后,应该懒洋洋地创建链接表条目。否则,当新用户注册或弹出新文章时,我们必须创建大量空链接记录,并处理并发。
这意味着为特定用户选择文章列表是一个结合了以下内容的查询:
ArticleUserLink
不存在的所有文章; ArticleUserLink
存在且is_hidden = 0
的所有文章。这里是
OR
的答案,还是有更有效的数据库设计/查询来解决问题?
答案 0 :(得分:3)
如何使用内部查询?
SELECT *
FROM Article a
WHERE NOT EXISTS(SELECT * FROM ArticleUserLink WHERE article_id = a.id AND (is_hidden IS NULL OR is_hidden != 0))
答案 1 :(得分:1)
只需使用LEFT JOIN
SELECT *
FROM Article a
LEFT JOIN ArticleUserLink ua ON (ua.article_id = a.id)
WHERE a.user_id = insert_user_id_here
AND (ua.is_hidden = 0) IS NOT FALSE
...
这样你就得到了
ua.is_hidden = 0