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;