【问题标题】:Retrieving "likes" tied to users from a database从数据库中检索与用户相关的“喜欢”
【发布时间】:2011-04-29 23:21:54
【问题描述】:

我是数据库结构的新手。我正在尝试创建一个允许用户喜欢某些条目的应用,但我希望能够将喜欢与用户联系起来,以便我可以在点赞操作之前/之后更改视觉效果。

我认为从研究中我应该有一个“条目”和“用户”表,然后有一个“喜欢”表将两者联系起来。

我唯一不确定的是,在获取和显示内容时......我将如何编写查询?如果我查询我需要的所有条目,我是否会返回并单独查询每个条目以查看它是否与当前用户相关联?这似乎是一项昂贵的操作。有没有更有效的方法?

希望这是有道理的, 谢谢。

【问题讨论】:

  • 您能否提供更多有关您要显示的内容的详细信息?只是用户标记的列表?或者,您是否正在尝试构建推荐系统(例如 Netflix 或 Amazon)?
  • 好吧,我会列出每个条目,但是如果用户已经喜欢它,则需要以不同的方式显示“like”按钮。 (AKA 它会显示为已点击。)所以它不仅仅是一个喜欢计数,因为它可能只是“条目”数据库中的一列。

标签: php sql database voting social-media-like


【解决方案1】:

我认为您的数据库设计是正确的。就查询而言,假设表是这样的:

用户

身份证 |姓名 1 |鲍勃 2 |莎莉

参赛作品

身份证 |姓名 1 |红色的 2 |蓝色 3 |黄色的

喜欢

用户名 |条目ID 1 | 1 1 | 2 2 | 2 2 | 3

所以我们可以说 Bob 喜欢红色和蓝色,而 Sally 喜欢蓝色和黄色。因此,检索所有条目的查询,加上 Bob 喜欢什么的指标将是:

SELECT 
e.ID,
e.Name,
l.UserID
FROM Entries e LEFT JOIN Likes l ON l.EntryID = e.ID
WHERE l.UserID = 1 -- Bob's User ID
ORDER BY e.Name

这会返回

身份证 |姓名 |用户身份 2 |蓝色 | 1 1 |红色 |空值 3 |黄色 | 1

UserID 列指示 Bob 是否喜欢该条目 - NULL 为 No,值为 Yes。

【讨论】:

    【解决方案2】:

    假设您有一个表 Entries,其中包含一个 entity_id 列(以及您存储的有关该实体的任何其他内容)和一个包含列 user_id 和 entity_id 的第二个表 UserLikes,您将执行以下操作:

     SELECT Entries.col1, Entries.col1 . . ., UserLikes.user_id
         FROM Entries LEFT OUTER JOIN UserLikes ON 
             Entries.entity_id = UserLikes.entity_id
         WHERE UserLikes.user_id = :user_id
             AND Entity.col_whatever = :whatever
    

    在本例中,Entries.col1, Entries.col2。 . .是您想要返回的有关条目的列列表。 :user_id 是一个参数,其中包含您当前尝试为其显示条目的用户的 id。最后一行代表您想要对条目设置的任何限制。

    此查询将为您搜索的每个条目提供一行。您可以检查返回的列 user_id 的值。如果为NULL,则表示用户不喜欢,如果包含用户id,则表示用户喜欢。

    【讨论】:

      【解决方案3】:

      我认为您可以同时检索条目并查询 likes 表,以获取当前用户是否喜欢执行存储过程的条目。所以你可以控制查询返回的数据集的值,例如返回一个列作为条目文本和一个布尔列来评估当前用户的喜好......这样你将至少有一个存储过程的参数指示谁是当前用户

      我希望这个想法对你有所帮助......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 2012-05-17
        • 1970-01-01
        相关资源
        最近更新 更多