gpt4 book ai didi

php - MySQL GROUP_CONCAT 与 COLUMN SPLIT

转载 作者:行者123 更新时间:2023-12-02 00:02:50 31 4
gpt4 key购买 nike

我正在使用 TABLE,需要逻辑帮助。

检查以下 URL 以获取表结构和示例数据。

http://sqlfiddle.com/#!2/ece06/2

表架构:

CREATE TABLE test (
ID INTEGER,
NAME VARCHAR (50),
VALUE INTEGER
);

插入的数据:
INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'B', 5);
INSERT INTO test VALUES (1, 'C', 8);
INSERT INTO test VALUES (2, 'D', 9);
INSERT INTO test VALUES (2, 'E', 9);
INSERT INTO test VALUES (3, 'F', 9);
INSERT INTO test VALUES (3, 'G', 9);
INSERT INTO test VALUES (3, 'H', 9);
INSERT INTO test VALUES (3, 'I', 9);

询问:
SELECT ID, GROUP_CONCAT(NAME) AS CODE
FROM test
GROUP BY ID;

输出:
ID  CODE
1 A,B,C
2 D,E
3 F,G,H,I

预期输出:
ID  CODE   CODE   CODE  CODE
1 A B C NULL
2 D E NULL NULL
3 F G H I

如您所见,查询的输出使用逗号连接。目前我们正在使用 PHP 进行字符串连接,它在显示时拆分!!

有没有其他方法可以拆分结果并在列和同一行中显示每个值?结果一样吗?

注意:每个 ROW 的 CODE 可能不同。

最佳答案

如果您知道 GROUP_CONCAT 条目的数量(我的意思是在 ID = 1 的情况下组合了 3 个字段,在 2 等情况下组合了 2 个字段),那么有一种肮脏的方式。

SELECT ID, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 1), ',', -1) AS CODE1,
If( length(GROUP_CONCAT(NAME)) - length(replace(GROUP_CONCAT(NAME), ',', ''))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 2), ',', -1) ,NULL)
as CODE2,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 3), ',', -1) AS CODE3
FROM test
GROUP BY ID;
输出:
ID  CODE1   CODE2   CODE3
1 A B C
2 D (null) E
3 F G H
上面的查询假设您是 GROUP_CONCAT-ing 3 个字段。如果您正在动态生成查询,您可以尝试一下。 SQLFIDDLE
编辑:
注意:每个 ROW 的 CODE 可能不同。 (忽略这个)

关于php - MySQL GROUP_CONCAT 与 COLUMN SPLIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279781/

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