INSERT INTO WITH SELECT导致插入多行而不是一行

时间:2013-12-14 07:10:43

标签: mysql sql

INSERT INTO `mailinglist_archives`
              (`recipients`) 
               SELECT `email`
               FROM mailinglist

SQL结果:

row 1 - xxxx@gmail.com

row 2 - sss@gmail.com

row 3 - abc@gmail.com

row 4 - orange@gmail.com

我需要什么 -

row 1 - xxxx@gmail.com,sss@gmail.com,abc@gmail.com,orange@gmail.com

2 个答案:

答案 0 :(得分:4)

试试这个

INSERT INTO `mailinglist_archives`
              (`recipients`) 
               SELECT GROUP_CONCAT(`email`)
               FROM mailinglist

答案 1 :(得分:4)

您可以使用GROUP_CONCAT

执行此操作
INSERT INTO `mailinglist_archives`
          (`recipients`) 
           SELECT GROUP_CONCAT(`email`)
           FROM mailinglist

那就是说,这不是一个好主意;您应该规范化数据库,而不是将列表存储在列中。

编辑以解决评论:

您可以将这两个查询结合起来:

$query0 = "INSERT INTO mailinglist_archives (subject, message, datesent) VALUES ('$subject', '$ckcontent', '$timestamp')";
$query01 = "INSERT INTO mailinglist_archives (recipients) SELECT GROUP_CONCAT(email) FROM mailinglist";
像这样:

INSERT INTO mailinglist_archives (subject, message, datesent, recipients)
SELECT '$subject', '$ckcontent', '$timestamp', GROUP_CONCAT(email) FROM mailinglist

然而,这将再次导致收件人列中的(可能非常大)列表。这迟早会导致问题,因此您最好通过创建一个匹配收件人ID和邮件ID的新表来规范化数据。

相关问题