gpt4 book ai didi

mysql - MySQL 中的变长数组

转载 作者:行者123 更新时间:2023-11-29 08:49:26 24 4
gpt4 key购买 nike

我正在用 PHP 编写一个应用程序,它使用 MySQL 数据库来存储信息。它必须存储的信息之一是名称数组,但该数组没有设定的长度。它的范围可以从一项到多项。有没有一种方法可以将此数组存储在 MySQL 中,并且能够通过仅指定数组中的一项来检索它?

例如,我希望能够在表中存储这样的内容:

Foo        Bar
-------------------
[baz,car] fiz
[abc,def] ghi

然后,我希望能够告诉 MySQL 仅搜索 carSELECT 上表中的第一行。

有可行的方法来实现吗?

最佳答案

实现它的方法是“规范化”模式。有几个相关的想法构成了模式规范化,但这里最关键的一个是您的数据应该用两个表和它们之间的关系来表示。这种关系被称为“一对多”,因为一个“Bar”有一个或多个“Foo”。

一个必要的步骤是向您的架构添加唯一标识符列(最简单的方法是使用自动递增整数),然后使用 JOIN 机制进行查询来关联您的数据。

这就是为什么我们将 MySQL(以及许多其他数据库)称为“关系”数据库。

Bar
+----+----------+
| id | name |
+----+----------+
| 01 | fiz |
+----+----------+
| 02 | ghi |
+----+----------+


Foo
+----+--------+----------+
| id | bar_id | name |
+----+--------+----------+
| 01 | 01 | baz |
+----+--------+----------+
| 02 | 01 | car |
+----+--------+----------+
| 03 | 02 | abc |
+----+--------+----------+
| 04 | 03 | def |
+----+--------+----------+

下面是基于 Foo 关系中的“car”选择“fiz”记录的连接

SELECT 
Bar.*
FROM Bar
JOIN Foo ON Bar.id = Foo.bar_id
WHERE Foo.name = "car"

如果您想要每个栏的 Foo 关系的完整列表以及匹配的 Foo:

SELECT 
Bar.*,
GROUP_CONCAT(Foo.name)
FROM Bar
JOIN Foo ON Bar.id = Foo.bar_id
WHERE Foo.name = "car"
GROUP BY Bar.id

关于mysql - MySQL 中的变长数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com