首页 > 解决方案 > Python Flask 项目的 TSQL 查询

问题描述

[表在此处输入图像描述s]

我正在努力为星期一的学校完成一个项目。我有 2 个表(用户和书籍)与我称为收藏夹的连接表具有多对多关系。我在网页(python/flask/jinja)中显示书名,并且有一个查询可以显示所有书名,但问题是在每本书下面我必须添加一个链接(添加到收藏夹)如果当前登录的用户不喜欢该特定书籍。

我需要这是一个查询以显示在同一个 div 中。

我的表格链接在上面的图片链接中。

我的选择查询

select *  from users  join favorites on users.id = favorites.user_id  join books on books.id = favorites.book_id

我遇到的问题是当我有一本书被当前用户和另一个用户喜欢时。如何过滤掉未登录用户喜欢的书?

标签: pythonsql

解决方案


您的查询选择所有用户与其书籍之间的关系。如果您只想查找当前用户喜欢的书籍,则应使用“WHERE”子句:

select *  from users 
join favorites on users.id = favorites.user_id 
join books on books.id = favorites.book_id 
where users.id = current_user_id

编辑:

如果要显示所有书籍并显示特定用户喜欢的书籍:

select b.*,u.* from books as b
left join favorites as f on f.book_id = b.id
left join users as u on u.id = f.user_id and u.id = current_user_id
group by b.id

如果当前用户没有收藏该书,则用户列将为空。

您还可以创建一个代表收藏状态的列:

select b.*,u.*,IF(u.id is null,0,1) as favorited
from books as b
left join favorites as f on f.book_id = b.id
left join users as u on u.id = f.user_id and u.id = current_user_id
group by b.id

推荐阅读