За последние 24 часа нас посетил 15491 программист и 1595 роботов. Сейчас ищут 807 программистов ...

GROUP_CONCAT vs JOIN

Тема в разделе "MySQL", создана пользователем Nachtvolk, 10 июн 2011.

  1. Nachtvolk

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

    С нами с:
    24 фев 2011
    Сообщения:
    31
    Симпатии:
    0
    Есть три таблички: две с объектами и одна со связями. Отношение один ко многим. Что-то не получается скукожить результат GROUP_CONCAT`ом так, чтобы на один объект(запись) `tour_models` выдавались все соответствия `dir` в одной строке. Понимаю, что в подзапрос нужно добавить какое-то условие, но не могу его собразить.
    [sql]SELECT
    `tour_models`.`mdltitle`,
    `tour_models`.`ID`,
    `tour_models`.`days`,
    (SELECT GROUP_CONCAT(`dir`.`dirtitle`)),
    `organizer`.`orgtitle`

    FROM
    `tour_models`
    LEFT JOIN `tour_models_x_dir`
    ON `tour_models`.`ID`=`tour_models_x_dir`.`ID_models`

    INNER JOIN `dir`
    ON `tour_models_x_dir`.`ID_dir`=`dir`.`ID`

    INNER JOIN `organizer`
    ON `tour_models`.`ID_organizer`=`organizer`.`ID`;[/sql]
     
  2. Nachtvolk

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

    С нами с:
    24 фев 2011
    Сообщения:
    31
    Симпатии:
    0
    Заработало после убирания подзапроса и добавления GROUP BY (как я его умудрился забыть?)
    [sql]SELECT
    `tour_models`.`mdltitle`,
    `tour_models`.`ID`,
    `tour_models`.`days`,
    GROUP_CONCAT(`dir`.`dirtitle`),
    `organizer`.`orgtitle`

    FROM
    `tour_models`
    LEFT JOIN `tour_models_x_dir`
    ON `tour_models`.`ID`=`tour_models_x_dir`.`ID_models`

    INNER JOIN `dir`
    ON `tour_models_x_dir`.`ID_dir`=`dir`.`ID`

    INNER JOIN `organizer`
    ON `tour_models`.`ID_organizer`=`organizer`.`ID`

    GROUP BY `tour_models`.`ID`;[/sql]