实现它的方法是“规范化”模式。有几个相关的想法构成了模式规范化,但这里关键的一个是你的数据应该用两个表和它们之间的关系来表示。这种关系被称为“一对多”,因为对于一个“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