【发布时间】:2020-05-02 05:15:34
【问题描述】:
我有一个网站需要合并喜欢,同时防止任何用户多次喜欢帖子。我正在使用 React、Express 和 MySql。 在这个网站上,有一个用户可以查看所有帖子的页面,其中每个条目包括:(1)帖子消息,(2)创建帖子的用户,以及(3)该帖子可能有多少喜欢。这是一个简单的 SQL 命令,我在其中执行了以下查询:
SELECT users.username, posts.message, posts.likes
FROM users
INNER JOIN posts
WHERE users.user_id = posts.post_id
在我当前的实现中,我在每个帖子上都有一个按钮,点击该按钮后,我的后端将与我的“likes”表中插入关联的 user_id 和 post_id 进行通信。我的愿景是,如果用户已经喜欢某个帖子,则显示一个不喜欢按钮,如果用户没有喜欢某个帖子,则显示一个喜欢按钮。
我知道我在创建“喜欢”表方面走在了正确的轨道上,因为我不能有重复的条目。 我想要的查询是一个可以列出用户喜欢和不喜欢的所有帖子的列表。我知道这可以通过 LEFT JOIN 或 RIGHT JOIN 获得在“posts”表和“likes”表之间。但是,通过这个结果列表,我如何区分用户喜欢的帖子和他们不喜欢的帖子,这样当我通过这个列表进行 map() 时,如果用户不喜欢,我可以轻松地放置一个喜欢按钮如果用户不喜欢该帖子,则发布或不同?
这是我的 SQL 架构:
Users Table (user_id, username, password) //Primary Key: user_id
Posts Table (post_id, message, likes) //Primary Key: post_id
Likes Table (user_id, post_id) //Primary Keys: user_id, post_id and Foreign Keys: user_id, post_id
【问题讨论】:
-
“但是,通过这个结果列表,我如何区分用户喜欢和不喜欢的帖子......” - 来自(左)JOIN。 “缺失”的行因此在外连接上具有 NULL 值意味着用户不喜欢。这可以在选择输出子句中进行修饰,例如:“case when like_id is null then 0 else 1 end as like”