В этом запросе/таблице
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
?
Вы хотите сгруппировать 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
на запятую.
Если вы использовали PDO, вы можете использовать fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN)
без использования GROUP_CONCAT()
.
GROUP_CONCAT()
как я выбираю другие столбцы с LIMIT 1
, это не фактический полный запрос, который я использую, но часть, с которой у меня есть проблема, добавит это сейчас в мой вопрос, также да Я использую PDO