За последние 24 часа нас посетили 20452 программиста и 1092 робота. Сейчас ищут 822 программиста ...

Групировка результатов БД (help)

Тема в разделе "MySQL", создана пользователем sasha1720017, 4 сен 2019.

  1. sasha1720017

    sasha1720017 Новичок

    С нами с:
    4 сен 2019
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, у меня есть 3 таблицы: Книги, Авторы и таблица которые связывает их. Используя вот такой код
    SELECT b.*, a.id as id_auth, a.first_name, a.last_name FROM book as b
    INNER JOIN book_to_author as ba
    ON b.id = ba.book_id
    INNER JOIN author as a
    ON ba.author_id = a.id
    WHERE b.id = ?'

    я получаю вот такой масив


    Array
    (
    [0] => Array
    (
    [id] => 7
    [name] => Design Patterns
    [isbn] => 749579432
    [date_published] => 2005-05-30
    [publisher_id] => 5
    [id_auth] => 7
    [first_name] => Эрих
    [last_name] => Гамма
    )

    [1] => Array
    (
    [id] => 7
    [name] => Design Patterns
    [isbn] => 749579432
    [date_published] => 2005-05-30
    [publisher_id] => 5
    [id_auth] => 8
    [first_name] => Ричард
    [last_name] => Хелм
    )

    [2] => Array
    (
    [id] => 7
    [name] => Design Patterns
    [isbn] => 749579432
    [date_published] => 2005-05-30
    [publisher_id] => 5
    [id_auth] => 9
    [first_name] => Ральф
    [last_name] => Джонсон
    )

    [3] => Array
    (
    [id] => 7
    [name] => Design Patterns
    [isbn] => 749579432
    [date_published] => 2005-05-30
    [publisher_id] => 5
    [id_auth] => 10
    [first_name] => Джон
    [last_name] => Влиссидес
    )

    )

    Вопрос, можно ли как то их сгрупировать, чтобы получить вот примерно такой код:


    [0] => Array
    (
    [id] => 7
    [name] => Design Patterns
    [isbn] => 749579432
    [date_published] => 2005-05-30
    [publisher_id] => 5
    [id_auth] => 10
    [0] => array(
    [first_name] => Джон
    [last_name] => Влиссидес
    )

    [1] => array(
    [first_name] => вася
    [last_name] => Пупкин
    )
    [2] => array(
    [first_name] => Ит д
    [last_name] => И тд
    )
    )
    Всем спасибо=))
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    именно так - нет,
    SQL не может отдавать вложенные массивы
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Ну тут вопрос не про sql я так понял
    PHP:
    1. $result = [];
    2. $array; //результат sql запроса
    3. foreach ( $array as $item)
    4. {
    5.       $result[] = [
    6.             'first_name' => $item['first_name'],
    7.             'last_name' => $item['last_name']
    8.     ];
    9. }
    10. return $result;
     
  4. sasha1720017

    sasha1720017 Новичок

    С нами с:
    4 сен 2019
    Сообщения:
    2
    Симпатии:
    0
    Дело в том, что эти результаты мне нужны только одним массивом, мне не нужно много идентичных массивов, где только одно поле отличается,и если я дописываю GROU BY id, то получу только одного автора..
    --- Добавлено ---
    А вариант сгрупировать с помощью GROUP_CONCAT и потом разбивать с помощью explode(), это вообще нормальная практика?
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Я понимаю, просто добавьте к нему ваш, например так:
    PHP:
    1. $array; //результат sql запроса
    2. $result = [
    3.      'id' => $array[0]['id'],
    4.      'name' => $array[0]['name'],
    5.      'isbn' => $array[0]['isbn'],
    6.      'date_published' => $array[0]['date_published'],
    7.      'publisher_id' => $array[0]['publisher_id'],
    8.      'id_auth' => $array[0]['id_auth']
    9. ];
    10. foreach ( $array as $item)
    11. {
    12.       $result[] = [
    13.             'first_name' => $item['first_name'],
    14.             'last_name' => $item['last_name']
    15.     ];
    16. }
    17. return $result;