php - GROUP_CONCAT() 获取多维数组

标签 php mysql sql

在此Query/Table

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_keychild_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/

相关文章:

mysql - 当其他表上没有更多行时 SQL 删除行

MySQL:对多个内部联接表使用 Case When Then End

具有 innodb 和可序列化事务的 Mysql 不会(总是)锁定行

sql - 在 TOAD 7 中格式化 sql 查询。

sql - Oracle 克隆用户的方法

php - 使用phpword编辑docx文件

具有不同文本和值的 JavaScript 动态下拉列表形成 php json

java - 如何使用 JPA 查询在同一字段中选择可变数量的相似字符串?

php - 如何对这些评论进行排序,以便最新的评论出现在顶部?

php - Laravel 以编程方式获取特定页面