Php 在一个字段中存储多个数据(在数据库中的数组中存储数据)

Php 在一个字段中存储多个数据(在数据库中的数组中存储数据),php,mysql,Php,Mysql,我有一个名为user\u thinks的表。该表有许多列,其中一列是最喜欢的列 一个思想可能会受到许多不同用户的青睐,但我不想创建一个新行,说明这个思想id已经受到这个用户的青睐 我希望它在一个字段中存储多个用户名。例如,喜欢的可以保存如下数据: Alice, Fred, Freddy, Conor .... 全部在一行中。我尝试过在phpMyAdmin上处理数据类型,但无法弄清楚该字段如何保存多个数据。处理此问题的理想方法是将其映射到另一个表,但您可以将其存储为json MySQL 5.7甚

我有一个名为
user\u thinks
的表。该表有许多列,其中一列是最喜欢的列

一个
思想
可能会受到许多不同用户的青睐,但我不想创建一个新行,说明这个
思想id
已经受到这个
用户的青睐

我希望它在一个字段中存储多个
用户名
。例如,
喜欢的
可以保存如下数据:

Alice, Fred, Freddy, Conor ....

全部在一行中。我尝试过在phpMyAdmin上处理
数据类型,但无法弄清楚该字段如何保存多个数据。

处理此问题的理想方法是将其映射到另一个表,但您可以将其存储为json

MySQL 5.7甚至将JSON作为一种数据类型,允许更轻松的过滤和操作

如果不需要搜索,您可以将json放入任何文本字段,等等。

您要求的是错误的方法。您不应将收藏夹数据序列化到
用户
表或
思想
表的文本字段中。这破坏了使用像MySQL这样的关系数据库的全部目的

正确的方法是:在
用户
表和
思想
表之间创建一个交叉引用表。这利用多对多表来存储收藏夹列表,使用
思想
行和
用户
行的主键

您的新
收藏夹
表格:

CREATE TABLE IF NOT EXISTS `favorite` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL,
  `thought_id` int NOT NULL,
  PRIMARY KEY (`id`)
);
这样做的目的是从
user
表中获取
id
并将其存储在
favorite.user\u id
中,然后将
think
表中的
id
存储在
favorite.think\u id

要为id为123的用户添加新收藏夹,为id为456的想法添加新收藏夹,请执行以下操作:

插入收藏夹(用户id、思想id)值('123','456')

获取将id为456的想法标记为他们最喜欢的想法的用户(使用
加入
):

与上一个查询类似,获取id为123的用户最喜欢的想法:

SELECT t.* FROM favorite AS f
  JOIN thought AS t ON t.id = f.thought_id
  WHERE f.user_id = 123;

坏主意,您可能应该有一个单独的表和单独的行。但是如果你无论如何都要这么做,也许
json\u encode()
。你会对上述决定感到后悔的。向社区寻求帮助就等于向街上的人们询问如何用手中的剪刀蒙着眼睛跑步。要详细说明@PeeHaa所说的话,你真的应该研究数据库规范化,并沿着这条路线走,而不是试图将所有这些都放在一个专栏中。这不太理想的原因有几个。我的意思是,如果你只是想在某个地方显示一个列表,上面写着“a,b,c喜欢这个”,那么可能没那么糟糕。但是,您将很难将数据用于除此之外的任何其他用途。您无法搜索数据(正在使用导致扫描所有行的类似操作)。您无法获得特定用户喜欢的“想法”列表(与上一点相同),甚至无法获得收藏计数。如果不修改整个字符串(按字母顺序、删除..等等),您就无法轻松地更新列表。结果就是头痛。
SELECT t.* FROM favorite AS f
  JOIN thought AS t ON t.id = f.thought_id
  WHERE f.user_id = 123;