Задать вопрос
@Billy_Milligan

Как сделать MySQL запрос, что бы получить сгруппированный массив?

У меня есть вот такой запрос:

$recipe_id = 43;

SELECT `a`.`author_id` , `r`.`name`, `r`.`photo`, `i`.`name`, `r_i`.`ingredient_count`, `ins`.`text`
FROM `recipe` AS `r`
    JOIN `author` AS `a` ON `r`.`author_id` = `a`.`author_id`
    JOIN `recipe_ingredient` AS `r_i` ON `r_i`.`recipe_id` = '$recipe_id'
    JOIN `ingredient` AS `i` ON `i`.`ingredient_id` = `r_i`.`ingredient_id`
    JOIN `instruction` AS `ins` ON `ins`.`recipe_id` = '$recipe_id'
WHERE `r`.`recipe_id`='$recipe_id'


Ответ я получаю в таком виде:

Array
(
    [0] =  Array
        (
            [author_id] =  20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Говядина
            [ingredient_count] = 800
            [text] = Это у нас типа инструкция #1
       
        )

    [1] = Array
        (
            [author_id] =  20
            [r_name] = Лазанья
            [photo] =  res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Говядина
            [ingredient_count] = 800
            [text] = Это у нас типа инструкция %#2
        )

    [2] =  Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Говядина
            [ingredient_count] = 800
            [text] = Это у нас типа инструкция %#3
        )

    [3] =  Array
        (
            [author_id] =  20
            [r_name] =  Лазанья
            [photo] =  res/recipe/2013/11/21/0_lazanya.jpg
            [name] =  Листы для лазаньи
            [ingredient_count] =  6
            [text] = Это у нас типа инструкция %#1

        )

    [4] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Листы для лазаньи
            [ingredient_count] = 6
            [text] = Это у нас типа инструкция %#2

        )

    [5] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Листы для лазаньи
            [ingredient_count] = 6
            [text] = Это у нас типа инструкция %#3
        )

    [6] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Помидоры
            [ingredient_count] = 4
            [text] = Это у нас типа инструкция %#1

        )

    [7] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Помидоры
            [ingredient_count] = 4
            [text] = Это у нас типа инструкция %#2
        )

    [8] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Помидоры
            [ingredient_count] = 4
            [text] = Это у нас типа инструкция %#3
        )

    [9] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Молоко
            [ingredient_count] =  1
            [text] = Это у нас типа инструкция %#1
        )

    [10] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Молоко
            [ingredient_count] = 1
            [text] = Это у нас типа инструкция %#2
        )

    [11] = Array
        (
            [author_id] = 20
            [r_name] = Лазанья
            [photo] = res/recipe/2013/11/21/0_lazanya.jpg
            [name] = Молоко
            [ingredient_count] = 1
            [text] = Это у нас типа инструкция %#3
        )

)


как видно, данные дублируются.Возможно ли сделать запрос так, что бы ответом было:

Array
(
    [author_id] = 20
    [r_name] = Лазанья
    [photo] = res/recipe/2013/11/21/0_lazanya.jpg
    [name] = Array (
                               [0] = Говядина
                               [1] = Молоко
                               [2] = и т.д.
                           )
    [ingredient_count] = Array (
                               [0] = 500
                               [1] = 200
                               [2] = и т.д.
                           )
    [text] = Array (
                               [0] = Это у нас типа инструкция %#1
                               [1] = Это у нас типа инструкция %#2
                               [2] = и т.д.
                           )
)
  • Вопрос задан
  • 3382 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
В некоторых похожих случаях можно посмотреть на group_concat()
Но здесь, я думаю, стоит сначала получить рецепты, а потом отдельными запросами по ингредиентам и инструкциям, where recipe_id IN(..)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Masterme
Нет
Ответ написан
Комментировать
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
MySQL - реляционная СУБД. А это значит, что данные представлены в виде таблиц, и результат тоже. Вы же хотите дерево. Неа.
Ответ написан
Комментировать
Koa
@Koa
Только на PHP
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы