我有一个像这样设置的 mySQL 表
+----+----------+---------+
| id | parentid | content |
+----+----------+---------+
| 1 | 0 | a |
| 2 | 1 | b |
| 3 | 0 | c |
| 4 | 3 | d |
| 5 | 3 | e |
| 6 | 3 | f |
+----+----------+---------+
我想做的是将子项的内容连接到父项的末尾(然后删除子项,但我稍后会这样做),基于 id 的 ASC 顺序。所以结果应该是这样的(没有 child )
+----+----------+---------+
| id | parentid | content |
+----+----------+---------+
| 1 | 0 | ab |
| 3 | 0 | cdef |
+----+----------+---------+
我遇到的问题是,如您所见, parent 可能有多个 child 。到目前为止,我的查询是
UPDATE table
SET content = CONCAT(content,
...
) ORDER BY id ASC
我不确定要在 ...
部分中放置什么以获取所有子项并按检索顺序追加它们。也许我的做法是错误的。任何帮助将不胜感激
最佳答案
一个选项是:
/*Table structure for table `table` */
DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`parentid` INT(11) UNSIGNED NOT NULL,
`content` VARCHAR(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB;
/*Data for the table `table` */
INSERT INTO `table`(`parentid`,`content`)
VALUES
(0,'a'),(1,'b'),(0,'c'),(3,'d'),(3,'e'),(3,'f');
UPDATE `table`
INNER JOIN
(SELECT `t0`.`id`, CONCAT(`t0`.`content`, GROUP_CONCAT(`t1`.`content` SEPARATOR '')) AS `content`
FROM `table` `t0`
INNER JOIN `table` `t1` ON `t0`.`id` = `t1`.`parentid`
WHERE `t0`.`parentid` = 0
GROUP BY `t1`.`parentid`) `der`
SET `table`.`content` = `der`.`content`
WHERE `table`.`id` = `der`.`id`;
DELETE FROM `table` WHERE `parentid` > 0;
关于mysql - 使用可变数量的其他字段更新 mySQL 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20408992/