Php 通过MySQL查询插入逗号分隔的值
我有一个表(在phpmyadmin中),具有以下字段和结构:Php 通过MySQL查询插入逗号分隔的值,php,mysql,sql,database,Php,Mysql,Sql,Database,我有一个表(在phpmyadmin中),具有以下字段和结构: Table 1 id | sponsor 1 | -1 2 | 1 3 | 1 4 | 2 5 | 4 6 | 4 现在我想将上表中的数据插入到新表中,如下所示: Table 2 id | children 1 | 2,3 2 | 4 3 | 4 | 5,6 5 | 6 | 实际上这是树结构,我保存在mysql数据库中 我已经用php编写
Table 1
id | sponsor
1 | -1
2 | 1
3 | 1
4 | 2
5 | 4
6 | 4
现在我想将上表中的数据插入到新表中,如下所示:
Table 2
id | children
1 | 2,3
2 | 4
3 |
4 | 5,6
5 |
6 |
实际上这是树结构,我保存在mysql数据库中我已经用php编写了一个脚本,但由于表1中的行数超过了10万行,所以需要花费太多时间。请告诉我一个高效的sql查询以快速完成此任务。您选择的元素之一应该是一个
GROUP_CONCAT(…)as列
,它将连接那些用逗号分隔的值。如果要按其中一个值进行筛选,可以使用groupby-which-HAVING find_in_set(-number-,column)
查看以下内容是否有帮助
INSERT INTO table2
SELECT sponsor, GROUP_CONCAT(id)
FROM table1
GROUP BY id
查询:
SELECT
t1.id,
(SELECT group_concat(id separator ', ')
FROM table1 t2
WHERE t2.sponsor = t1.id) AS children
FROM table1 t1
GROUP BY t1.id
结果:
| ID | CHILDREN |
-----------------
| 1 | 2, 3 |
| 2 | 4 |
| 3 | (null) |
| 4 | 5, 6 |
| 5 | (null) |
| 6 | (null) |
插入语句:
INSERT INTO table2
SELECT
t1.id,
(SELECT group_concat(id separator ', ')
FROM table1 t2
WHERE t2.sponsor = t1.id) AS children
FROM table1 t1
GROUP BY t1.id
这与类似,但使用左连接而不是相关子查询:
插入到表2中(id,子项)
挑选
sp.id,
作为儿童的组_CONCAT(ch.id)
来自表1 sp
左连接表1 sp.id=ch.赞助商上的ch
按t1.id分组
;
可以找到(并使用)SELECT语句结果的演示(该模式是从Justin借用的)。您能在此处编写查询吗?这将给出以下输出:-1、12、13、24、45、46、,