从数据库中检索与用户关联的“喜欢”

时间:2010-10-24 22:17:13

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

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

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

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

希望有道理, 感谢。

3 个答案:

答案 0 :(得分:1)

假设您有一个包含列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是一个参数,其中包含您当前尝试显示Entries的用户的ID。最后一行代表您想要在条目上返回的任何限制。

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

答案 1 :(得分:1)

我认为您有正确的数据库设计。就查询而言,假设表格如下:

用户

ID | Name
1  | Bob
2  | Sally

条目

ID | Name
1  | Red
2  | Blue
3  | Yellow

<强>喜欢

UserID | EntryID
1      | 1
1      | 2
2      | 2
2      | 3

所以我们可以说鲍勃喜欢红色和蓝色,而莎莉喜欢蓝色和黄色。因此,检索所有条目的查询以及 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

这将返回

ID | Name   | UserID
2  | Blue   | 1
1  | Red    | NULL
3  | Yellow | 1

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

答案 2 :(得分:0)

我认为如果当前用户喜欢执行存储过程的条目,我可以同时检索条目并查询like表。所以你可以控制查询返回的数据集的值,例如为条目文本返回一个colum,一个boolean列来评估当前用户喜欢的...这样你将至少有一个参数用于存储过程表明谁是当前用户

我希望这个想法有助于你...