За последние 24 часа нас посетили 17966 программистов и 1602 робота. Сейчас ищут 1710 программистов ...

Сложные запросы. Многоуровневый массив.

Тема в разделе "MySQL", создана пользователем sheff88, 16 июл 2008.

  1. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    Здравствуйте! Вопрос такой. Может ли mysql возвращать многоуровневые массивы. Опишу на примере. Есть таблица с пользователями. В ячейке "права" лежат id прав по типу "1,2,5,8...". Хотелось бы путем сложного запроса получить многоуровневый массив, где в элементе "права" вместо номеров прав лежал бы вложенный ассоциативный массив из таблицы прав вроде:
    assoc{
    'id' => 3,
    'name' => 'Вася',
    'rights' => assoc{
    0{
    'id' => 1
    'name' => 'Право на что-то...'
    }
    1{
    'id' => 2
    'name' => 'Право на что-то... другое'
    }
    }
    }

    Вот такая вот специфическая потребность. Заранее спасибо.
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Не может.
     
  3. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    А как-нибудь с вложенными запросами намудрить если?
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Функции mysql_fetch_* в любом случае возвращают одноуровневый хэш.
     
  5. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    Все, понял. Большое спасибо, будем это реализовывать допотопно. Т.е. foreach по всем записям и дописывать по вложенному массиву.
     
  6. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    А если использовать PostgreSQL (извините, что не в теме, так как это продолжение начатого)? Возможно решить такую задачу? pg_fetch_assoc тоже одноуровневый?
     
  7. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    sheff88
    Да. И у Оракла, и у MSSQL, и у SQLite - так, на всякий случай :D
     
  8. Anonymous

    Anonymous Guest

    У Оракла есть CUBE и ROLLUP, но в ПХП их получить, по моему, нельзя )
     
  9. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    так, так, про Oracle знаю, спасибо. Вот применительно к PostgreSQL как это возможно реализовать? На php.
     
  10. GudGuy

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

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    вообще, можно создать оч сложный запрос с использованием псевдонимов, и на выходе получить длинный одноуровневый массив, с определенными правилами именования... но стоит-ли?
     
  11. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    Это уже на извращение будет похоже))). А многоуровневый массив php вернуть никак?
     
  12. Anonymous

    Anonymous Guest

    Если ты покажешь, как мыбрать многоуровневые данные одним SQL, я скажу тебе как его вернуть.
     
  13. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Покажи сиськи.
     
  14. Anonymous

    Anonymous Guest

    lexa, ты молчи, ты продался Хабру за карму )
     
  15. shreck

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

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    PHP:
    1.  
    2. function getMlArray() {
    3. return array(1,2, array(3,4, (array(5,6))));
    4. }
    5.  
    :wink:
     
  16. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Ну может быть возможно как-то поиграться с JOIN'ами, ORDER и GROUP BY'ями, но это гемор.
     
  17. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    Вывод получается такой, что в общем-то дело не в СУБД. А в php. PHP не может нативно возвращать многоуровневые массивы от СУБД. Жаль...
     
  18. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Я лишь хотел любви. Для мну карма - синоним любви. :)

    А я тебе покажу: (.)(.)
     
  19. Anonymous

    Anonymous Guest

     
  20. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Всё делаеться, на SQL выбираем набор данных, на PHP формируем нам нужный массив.
    Мне уже не раз приходилось генерировать дерево из результата запроса, а потом в правильном порядке складывать его обратно в двумерный массив для вывода (так нужно из-за того, что на SQL не возможно правильно отсортировать дерево по алфавиту к примеру).

    Горбунов Олег
    P.S. подпись лол ;)
     
  21. sheff88

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

    С нами с:
    16 июл 2008
    Сообщения:
    22
    Симпатии:
    0
    Можно такую тему замутить?:
    [sql]select *.groups, (select * from rights) as rights from groups, rights[/sql]
    или так:
    [sql]select *.groups, *.rights as rights from groups, rights[/sql]