我似乎已经达成了一个心理障碍,并希望有人可以给我一个正确的方向。
我有一个类似于新闻阅读器客户端的Web应用程序。它是用Python编写的,并且使用SQLAlchemy,但这并不重要,因为我试图了解SQL,我也使用SQLite作为后端。
有一个Users表和一个Articles表,Users表足够明显,Articles表存储单个文章(比如新闻服务器上的帖子)。我通过使用另一个表Users_Articles的许多关系来跟踪哪个用户已经阅读了哪篇文章。
(减少)架构是这样的:
Users:
user_id
user_name
Articles:
article_id
article_body
Users_Articles:
user_id
article_id
我要做的是选择一个文章列表,但也要显示当前用户已经读过哪篇文章,因此我想在SELECT语句中的列集中添加一个布尔列。指示Users_Articles中是否有一行引用当前用户的文章。
答案 0 :(得分:1)
你可以选择左外连接
select
a.article_id, a.article_body,
ua.article_id as as been_read --will be not null for read articles
from Articles a
left outer join Users_Articles ua
on (ua.article_id = a.article_id and ua.user_id = $current_user_id)
或使用subselect
select
a.article_id, a.article_body,
(select 1 from Users_Articles ua
where ua.article_id = a.article_id
and ua.user_id = $current_user_id) as been_read --will be not null for read articles
from Articles a