SELECT a.name, b.bgs
FROM names a
JOIN
(
SELECT rbg.a_id, GROUP_CONCAT(bg.bg, rbg.cl SEPARATOR ',') AS bgs
FROM bgs_names rbg
INNER JOIN bgs bg ON bg.id = rbg.bg_id
GROUP BY rbg.a_id
) b ON b.a_id = a.id
WHERE a.id = 1
//name: studio
//bgs : blackcolour,redcolour,bluecolour,bluergba
我想将 bgs
的值作为有效的Array
,如下所示
Array
(
['colour'] => Array
(
[0] => 'black'
[1] => 'red'
[2] => 'blue'
)
['rgba'] => Array
(
[0] => 'blue'
)
)
如何在SQL
中处理explode()
它?
我使用 PHP 所做的是在 bg.bg、rbg.cl
之间创建另一个分隔符,如下所示 GROUP_CONCAT(bg.bg,':',rbg.cl SEPARATOR ',') AS bgs
获取black:colour,red:colour,blue:colour,blue:rgba
然后我执行以下操作
<?php
$string = "black:colour,red:colour,blue:colour,blue:rgba";
$array = explode(',', $string);
echo "<br>";
$newarr = null;
$lastarr = [];
foreach ($array as $arr) {
$newarr = explode(':', $arr);
$lastarr[$newarr[1]][] = $newarr[0];
}
print_r($lastarr);
?>
这给了我想要的结果,我可以使用 SQL
来制作单个 explode()
或更快的方法来处理 $string
?
最佳答案
您希望通过 parent_key
对 child_value
进行分组,因此不要对整个内容进行 group_concat
分组,而是对 parent_key 进行分组
并像这样连接 child_key
SELECT
`parent_key`, GROUP_CONCAT(`child_value` SEPARATOR ',') AS array
FROM
`table`
GROUP BY `parent_key`;
返回:
parent_key array
---------- -------------------
a The earth
b The moon,The rift
c The sun
然后使用 php 将 array
的每个值以逗号进行分解。
关于php - GROUP_CONCAT() 获取多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991863/