在同一个表中使用带有GROUP_CONCAT的SELECT语句执行UPDATE

时间:2012-03-01 21:13:57

标签: mysql drupal select

我正在尝试更新MySQL中的数据库表以组合行。这是表格的一部分:

NID     SID     CID     NO      DATA  
5297    32002   5   0   10  
5297    32002   5   1   17  
5297    32002   5   2   1976

“数据”列包含构成日期的月,日和年。所以我想将这些记录合并到以下内容中:

5297    32002   5   0   10-17-1976

对于每个SID,它包含一个包含3个不同行的CID,由“否”列表示,并包含日期的三个部分。

我可以使用这个select语句获得所需的输出:

SELECT GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-') AS data FROM
webform_submitted_data_copy d WHERE cid = "5" GROUP BY d.sid

这将返回UPDATE后'data'列中的内容。但是我无法弄清楚如何形成正确的UPDATE语句......类似于:

UPDATE webform_submitted_data_copy 
SET webform_submitted_data_copy.data = (GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-'))
WHERE webform_submitted_data_copy.cid = "5" GROUP BY webform_submitted_data_copy.sid

但是这会影响0行,并且没有失败......尝试了许多其他可能的陈述而没有任何快乐。

???

任何人都知道我需要做些什么来使这项工作?

1 个答案:

答案 0 :(得分:0)

听起来你真的不想要UPDATE声明。运行UPDATE后,您的表仍具有与以前相同的记录数;但听起来你希望它最终得到的记录数量是它的三分之一。 (右?)

所以我认为你最好的办法是创建一个临时表;像这样的东西:

CREATE TABLE webform_submitted_data_copy_temp
SELECT d.nid, d.sid, d.cid, GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-') AS data FROM
webform_submitted_data_copy d WHERE cid = "5" GROUP BY d.sid;

UPDATE webform_submitted_data_copy
   SET data =
        ( SELECT data
            FROM webform_submitted_data_copy_temp
           WHERE sid = webform_submitted_data_copy.sid
        )
 WHERE cid = '5'
   AND no = 0
;

DELETE webform_submitted_data_copy
 WHERE cid = '5'
   AND no > 0
;

DROP TABLE webform_submitted_data_copy_temp;