拆分为逗号分隔的字符串,并在MySQL和PHP中显示

时间:2019-03-01 16:55:08

标签: php mysql

我有一个小型数据库:

+-----------+-----------+------------------------+
| Name      | Number    |   Hobby                | 
+-----------+-----------+------------------------+
| Alex      | 2, 3      | Game, Shopping         |
+-----------+------------------------------------+

2号代表游戏,3号代表购物。 我如何显示上述表格中的数据

+-----------+-----------+
| 2         | Game      |
+-----------+-----------+
| 3         | Shopping  |
+-----------+------------

2 个答案:

答案 0 :(得分:1)

您的数据库未规范化。您需要第三个表,通常称为联接表。

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是一个外键,它引用了人员表中的ID。 hobby_id是一个外键,它引用了兴趣表中的ID。

拥有外键将使您避免在people_hobbies表中没有在people和hobbies表中都不存在的键。

下表中的示例显示,编号为1的人有两个爱好(1和2)。对于人类而言,这意味着Alex的爱好是游戏和购物。

上面的结构使您可以像大多数人一样管理数据库。

请记住以下几点:

  1. 您不能在people_hobbies中添加任何内容,然后再将其同时存在于people和hobbyies表中
  2. 您必须对外键定义进行CASCADE UPDATE和CASCADE DELETE,以便从表中删除一个人或一个爱好时,它将从people_hobbies表中删除该关系。

答案 1 :(得分:0)

.getDataAsList("test1", true)