gpt4 book ai didi

mysql - 使用可变数量的其他字段更新 mySQL 字段

转载 作者:行者123 更新时间:2023-11-30 23:09:39 24 4
gpt4 key购买 nike

我有一个像这样设置的 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;

SQL Fiddle demo

关于mysql - 使用可变数量的其他字段更新 mySQL 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20408992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com