2015-04-02 4 views
0

Я пытаюсь создать единый запрос для сбора информации из нескольких таблиц. Вот основные для понимания моих потребностей:Выбор массивов, подзапросов и результатов нескольких строк

Информация, собранная из таблицы, проста. Один ряд за результат. Это основной результат, поэтому давайте просто сделаем переменные p.id, p.name и p.street. Вызовите реквизиты таблицы p.

Информация из второй таблицы, которую я буду называть событиями e, также будет простой. Будет одно событие для каждой опоры, и оно присоединяется к p.id = e.pid. Из этой таблицы нам нужно e.event_start.

Вот где он становится жестким. Третья таблица имеет два уровня множественных результатов: назовем ее функциями f. В нем четыре столбца: fid, pid, функция и desc. Мы присоединяем его к p.id = f.pid.

Что мне нужны результаты, которые выходят так:

[0] PID 
[1] name 
[2] street 
[3] event_start 
[4] features 
    [0] lighting 
     [0] red 
     [1] orange 
    [0] sound 
     [0] guitar 
     [1] drum 
     [2] keyboard 

Теперь я искал в Интернете для решения, думая, что я мог бы сделать это с помощью подзапросов в избранных:

SELECT p.id, p.name, p.street, e.event_start, (SELECT f.feature) 

с помощью объединений, конечно. От простого до сложного я не получил работу. Я посмотрел на GROUP_CONCAT, но это определенно не дает мне то, что мне нужно ... это делает одну строку и т. Д.

Есть ли способ сделать это в одном запросе? Если да, совет о том, как очень приветствуется.

Спасибо за ваше время.

ответ

0

Из того, что я понял; у вас есть три таблицы p, e, f, и вам нужно получить значения из этих таблиц с помощью JOIN. Это так:

SELECT p.id,p.name,p.street,e.event_start,f.feature,f.desc 
          -- i'm not sure you need features from third table based on conditions. Use CASE WHEN in the select 
          --sorry didn't understand what you mentioned 
FROM p JOIN e ON p.id=e.pid 
     JOIN f ON p.id=f.pid 
WHERE      --state your conditions 
+0

Сортировка, но не совсем. Описанный вами метод даст нам несколько строк: отдельную строку для каждой комбинации функций/значений. Мне нужна одна строка с pid, вся другая информация из первых двух таблиц и каждая комбинация признаков/значений из таблицы функций. Одна строка на p.id – dglickler

+0

Это строка или столбец? Чтобы значения из другого столбца отображались в том же столбце, вы можете использовать concat: CONCAT (f.feature, ',', f.desc) в предложении select. – user4704642

+0

Я закончил использование GROUP_CONCAT с CONCAT_W, разделяющим запятые и точки с запятой, и это сработало. – dglickler

Смежные вопросы