0

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

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

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

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

4

3 回答 3

1

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

 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,它被用户喜欢。

于 2010-10-25T00:46:37.903 回答
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。

于 2010-10-25T00:55:56.093 回答
0

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

我希望这个想法能帮助你...

于 2010-10-25T00:28:26.067 回答