【问题标题】:Search in MySQL with Spaces [closed]使用空格在 MySQL 中搜索 [关闭]
【发布时间】:2015-07-15 02:28:13
【问题描述】:

我正在创建一个类似于 Instagram 的应用程序。我有一个photos 表,其中有一个likers 列,显示哪些user_ids 喜欢了一张照片。例如,如果user_id 1 和 5 与photo_id 51 类似,那么photo_id 51 的likers 列将显示1 5。如图所示,user_ids 由空格分隔。现在,就像 Instagram 一样,我希望能够显示哪些用户名喜欢特定照片。为此,我需要能够分别从likers 列中获取所有user_ids。任何人都可以帮助我如何做到这一点,或提出另一种方法?

【问题讨论】:

  • 考虑一个联结/相交表并将它们保存为单独的行?
  • 您需要退后一步,了解数据库范式。这违背了关系数据库的第四范式。您不会在一个字段中存储多个值。相反,您将在名为“photo_likers”的表中有多个记录,该表将具有“照片”表的 photo_id 的外键。该 photo_likers 表将是关系表,并且与“照片”表具有一对多的关系。
  • 我阅读了您的两篇 cmets,并将学习范式。我只是想自学 mysql rn,所以我有一些差距,但我已经为另一个 cmets 功能做了这种事情。其中 cmets 表有 cmets,然后是 photo_Id。不知道为什么我不考虑在这里使用它。

标签: php mysql sql database


【解决方案1】:

您以错误的方式处理此问题。您几乎肯定不想在一个字段中存储多条数据。你想要这样的东西:

Table: User
- id
- blah blah

Table: Photo
- id
- blah blah

Table: Like
- user_id
- photo_id

这将允许您编写非常灵活的查询,包括您所描述的内容:

SELECT u.id
FROM User AS u
JOIN Like AS li ON li.user_id = u.id
WHERE li.photo_id = $current_photo_id

这是一个名为database normalization 的主题。如果您希望您的申请成功,请阅读更多相关信息。

【讨论】:

  • 补充一点,like 表也称为数据透视表,它允许userphoto 表之间存在多对多关系。一个用户可以有很多张照片,一张照片可以被很多用户点赞。
  • E.F. Codd 博士会很自豪
  • 有道理。谢谢你!我会尽快将其标记为正确答案。
  • 告诉我blah 是什么? :-)
  • 我希望你能进入“正常形式”并指导 OP 研究它们。但是,您的解决方案是正确的。但我的意见是,您还需要给出解决方案的根源,以鼓励正确理解为什么这是最好的方法。
猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多