Вывод многомерного массива sql
Имеются 3 таблицы со связью многие ко многим
(Project)-> там находятся все проекты.
(Tags)-> там находятся теги.
(P_tags)-> там находятся id проекта и id тега.
В данный момент есть такой запрос
$card = $Db->queryAll(
"SELECT project.id,
project.name,
project.description,
project.image,
project.link,
GROUP_CONCAT(tags.name) as tags
FROM project
LEFT Join p_tags ON project.id = p_tags.project_id
INNER join tags ON tags.id = p_tags.tag_id
GROUP BY project.id");
Возможно ли выводить многомерный массив из базы данных?
Пример вывода который должен получится
{
"name": "aaa",
"description": "bbb",
"image": "",
"link": "",
"tags": [
{
"name": "java",
"bg_color": 0,
"text_color": 0
},
{
"name": "python",
"bg_color": 0,
"text_color": 0
},
{
"name": "android",
"bg_color": 0,
"text_color": 0
}
]
}
В данный момент можно выводить некоторые данные только в строчку:
{
"id": "1",
"name": "name",
"description": "description",
"image": "",
"link": "",
"tags": "java,kotlin,python"
}
PS. Вывод осуществляется через php echo json_encode($card);
Ответы (1 шт):
Автор решения: SniffRx
→ Ссылка
Данный вопрос я решил таким методом:
$card = $Db->queryAll(
"SELECT project.id, project.name, project.description, project.image, project.link, GROUP_CONCAT(tags.name) as tags
FROM project
LEFT Join p_tags ON project.id = p_tags.project_id
INNER join tags ON tags.id = p_tags.tag_id
GROUP BY project.id");
$result = [];
for ($i=0; $i < sizeof($card); $i++) {
$tags = explode(',', $card[$i]['tags']);
$tags = array_chunk($tags, 3);
$g = 0;
$tags_name = '';
$tags_bg_color = '';
$tags_text_color = '';
for ($a=0; $a < sizeof($tags); $a++) {
$tags_name = $tags_name.' '.$tags[$a][0].',';
$tags_bg_color = $tags_bg_color.' '.$tags[$a][1].',';
$tags_text_color = $tags_text_color.' '.$tags[$a][2].',';
}
$tags_name = explode(',',substr($tags_name,0,-1));
$tags_bg_color = explode(',',substr($tags_bg_color,0,-1));
$tags_text_color = explode(',',substr($tags_text_color,0,-1));
for ($b=0; $b < sizeof($tags_name); $b++) {
$tags_result[] = [
'name' => $tags_name[$b],
'bg_color' => (int)$tags_bg_color[$b],
'text_color' => (int)$tags_text_color[$b],
];
}
$result[] = [
'id' => $card[$i]['id'],
'name' => $card[$i]['name'],
'description' => $card[$i]['description'],
'image' => $card[$i]['image'],
'link' => $card[$i]['link'],
'tags' => $tags_result
];
$tags_result = [];
}
echo json_encode($result);