【问题标题】:Strategy to incorporate Likes, while preventing users from "multi-liking" utilizing MySQL合并喜欢的策略,同时防止用户使用 MySQL 进行“多点喜欢”
【发布时间】: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”

标签: mysql sql


【解决方案1】:

在普通post_id 上将likes 左连接到posts 和相关用户的ID。然后检查是否l.user_id IS NOT NULL。如果且仅 fi 是,则用户喜欢该帖子。

SELECT p.*,
       l.user_id IS NOT NULL liked
       FROM posts p
            LEFT JOIN likes l
                      ON l.post_id = p.post_id
                         AND l.user_id = ?;

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 2016-11-09
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2020-11-23
    相关资源
    最近更新 更多