php - 以逗号分隔的字符串拆分并在 MySQL 和 PHP 中显示
问题描述
我有一个小型数据库:
+-----------+-----------+------------------------+
| Name | Number | Hobby |
+-----------+-----------+------------------------+
| Alex | 2, 3 | Game, Shopping |
+-----------+------------------------------------+
这意味着数字 2 是游戏,数字 3 是购物。我怎样才能像这张表一样显示上面的数据
+-----------+-----------+
| 2 | Game |
+-----------+-----------+
| 3 | Shopping |
+-----------+------------
解决方案
您的数据库未标准化。您需要第三个表,它通常称为连接表。
The people table. The primary key is id
+-----------+-----------+
| Id | Name |
+-----------+-----------+
| 1 | Alex |
| 2 | Thor |
| 3 | Iron Man |
| 4 | Dr Stange |
| 5 | Thanos |
+-----------+------------
The hobbies Table
+-----------+-----------+
| Id | Name |
+-----------+-----------+
| 1 | Game |
| 2 | Shopping |
| 3 | Fighting |
+-----------+-----------+
Join table called (for example) people_hobbies
+-----------+-----------+
| person_id | hobby_id |
+-----------+-----------+
| 1 | 1 |
| 1 | 2 |
+-----------+-----------+
这个 people_hobbies 表将使用 person_id 和 hobby_id 创建一个多字段主键。这将确保您将无法两次添加相同的组合......这甚至没有意义。
person_id 是一个外键,它引用了 people 表中的 id。hobby_id 是一个外键,它引用 hobbies 表中的 id。
拥有外键可以让您避免在 people_hobbies 表中有一个在 people 和 hobbies 表中都不存在的键。
下表中的示例显示人员 id 1 有两个爱好(1 和 2)。对于人类来说,亚历克斯的爱好是游戏和购物。
上述结构将让您以大多数人的方式管理您的数据库。
请记住以下几点:
- 在 people_hobbies 存在于 people 和 hobbies 表之前,您不能在它们中添加任何内容
- 您必须对外键定义进行 CASCADE UPDATE 和 CASCADE DELETE,以便当您从表中删除人员或爱好时,它会从 people_hobbies 表中删除关系。
推荐阅读
- pyspark - pyspark dataframe when 和 multiple else 子句
- c# - 如何在交叉组装环境中最好地部署 Sentry?
- php - Swagger 注解和 OpenAPI v3.0 中的“Produces”注解是什么?
- string - 字符串不包含日期
- triggers - 在 Phpmyadmin 中的更新触发器之前如何获取更新的值
- r - kable:垂直对齐不适用于 pdf 输出
- c# - GODOT - C# 引用当前节点
- html - 如何并排对齐餐厅菜单的标题?
- javascript - 复杂数组过滤条件
- python - 两个符号之间的 Strike-Down Markdown 文本