Php 通过MySQL查询插入逗号分隔的值

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编写

我有一个表(在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编写了一个脚本,但由于表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、,