python - Python Flask 项目的 TSQL 查询
问题描述
我正在努力为星期一的学校完成一个项目。我有 2 个表(用户和书籍)与我称为收藏夹的连接表具有多对多关系。我在网页(python/flask/jinja)中显示书名,并且有一个查询可以显示所有书名,但问题是在每本书下面我必须添加一个链接(添加到收藏夹)如果当前登录的用户不喜欢该特定书籍。
我需要这是一个查询以显示在同一个 div 中。
我的表格链接在上面的图片链接中。
我的选择查询
select * from users join favorites on users.id = favorites.user_id join books on books.id = favorites.book_id
我遇到的问题是当我有一本书被当前用户和另一个用户喜欢时。如何过滤掉未登录用户喜欢的书?
解决方案
您的查询选择所有用户与其书籍之间的关系。如果您只想查找当前用户喜欢的书籍,则应使用“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
推荐阅读
- sql - 将txt文件导入sql表
- graphene-python - 在 GraphiQL [石墨烯] 中显示来自解析器的文档字符串
- api - 如何在没有 SSL 的情况下使用谷歌语音到文本 API?
- ionic-framework - 无法从 ionic 框架构建 android apk 文件
- c# - 如何使用 MS DataGrid 的 OleDb 连接将编辑的值更新到 Microsoft Access 数据库?
- javascript - 使用 javascript 更改内容
- powershell - 我可以在 Powershell 中检测到我在 VS Code 的集成终端中运行吗?
- php - PHP如何计算历史时区?
- apache-spark - 为什么从嵌套的 SparkDataframe 中提取值会更改值?
- android - Gradle 构建无法解析所有 Path_provider 依赖项