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

Как сформировать запрос для нескольких таблиц без повторов выводимых данных?

Доброго времени суток !
Есть 3 таблицы:
1. user
2. user_phone
3. user_email

делаю запрос и вывожу данные:
$result = mysqli_query('
    SELECT t1.name, t2.number, t3.email
    FROM user AS t1
    LEFT JOIN user_phone AS t2 ON t2.user_id = t1.id
    LEFT JOIN user_email AS t3 ON t3.user_id = t1.id
');

for ( $i = 0 ; $i < mysqli_num_rows( $result ) ; ++$i ) {

    $row = mysqli_fetch_row( $result );
    pre( $row );

}

получаю
Array
(
    [0] => Денис
    [1] => 516516
    [2] => ewq@ewq.ru
)
Array
(
    [0] => Денис
    [1] => 516516
    [2] => qqq@www.ru
)
Array
(
    [0] => Денис
    [1] => 8909099887
    [2] => ewq@ewq.ru
)
Array
(
    [0] => Денис
    [1] => 8909099887
    [2] => qqq@www.ru
)

как видите у пользователя Денис есть два телефона и два email
можно ли запросом упорядочить данные, чтобы вышло примерно следующее:
array(
        [0] => 'Денис',
        [phone] => array(
            [0] => '516516',
            [1] => '8909099887'
        ),
        [email] => array(
            [0] => 'ewq@ewq.ru',
            [1] => 'qqq@www.ru'
        )

пока формирую дерево, путем перебора и загоняю данные так как нужно и далее вывожу. Спасибо
  • Вопрос задан
  • 199 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Так как запросы из бд возвращают построковые данные, ни о каких вложенных массивах речи быть не может. Единственный вариант - хранить в поле json, который, уже после получения, средствами языка получать как массив/объект. Или как написал oxidmod - конкатенацией групп, получим строку вместо json, но хранение будет более нормализованным.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alex-1917
@alex-1917
Если ответ помог, отметь решением
Да, группировка самый простой способ, другие варианты всяко прожорливее.
И кстати группировку при больших объемах можно и нужно делать не в MySQL, а в php - т.е. одним простым и быстрым запросом вытягиваешь ВСЁ в массив, далее в массиве спокойно группируешь и выводишь - тут будут использоваться уже ресурсы процессора, так разумнее, ведь редко нужно предоставлять требуемый тебе результат в течение 1 микросекунды, у тебя же не биржа с биткойнами, ну а за 1 миллисекунду любой процессор разложит массив по полочкам. будь в нем хоть миллион строк, пишу, потому что делал так, это не из гугла!!))
Ответ написан
Ваш ответ на вопрос

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

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