GROUP_CONCAT () для извлечения многомерного массива

0

В этом запросе/таблице

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?

Теги:

2 ответа

0
Лучший ответ

Вы хотите сгруппировать child_value с помощью parent_key, поэтому вместо group_concat всего этого, group на 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 на запятую.

  • 0
    Обновлен запрос.
0

Если вы использовали PDO, вы можете использовать fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN) без использования GROUP_CONCAT().

  • 0
    К сожалению, я должен использовать GROUP_CONCAT() как я выбираю другие столбцы с LIMIT 1 , это не фактический полный запрос, который я использую, но часть, с которой у меня есть проблема, добавит это сейчас в мой вопрос, также да Я использую PDO
  • 0
    Тогда вы ничего не можете сделать в простом SQL, хотя похоже, что вы могли бы что-то сделать с типом данных MySQL JSON, но у меня нет никакого опыта с этим.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню