2013-02-21 2 views
2

У меня есть 3 таблицы. Мне нужно присоединиться к 2 из них и присоединиться к объединенной таблице, чтобы вернуть значения в строке. Прочтите ниже для уточнения.Как подключить и развернуть таблицу в MySQL

Table 1: 
t1ID Title 
01  Title 1 
01_01 Title 1a 
01_02 Title 1b 
01_03 Title 1c 
02  Title 2 
02_01 Title 2a 
02_02 Title 2b 

... и так далее

Table 2 (not used in my join, but shown to see relationship between 3 tables -- contains a fixed number of rows which is 10): 
t2ID Description 
01 Desc A 
02 Desc B 
03 Desc C 
... 
10 Desc J 


Table 3: 
t1ID t2ID Value 
01  01 A 
01  02 B 
... 
01  10 C 
01_01 01 D 
01_01 02 E 
... 
02_01 10 F 
02_02 01 G 
02_02 02 H 

... и так далее

Я хочу присоединиться к таблице 1 и таблице 3 на t1ID где Таблица 1 является основным или мастер и В таблице 3 приведены подробные значения. Мне нужно заказать таблицу 3 на t2ID, чтобы сохранить последовательность, чтобы я мог нормально обрабатывать вывод.

Я хотел бы результаты запроса выглядеть следующим образом:

row[0] row[1] row[2] ... row[10] 
Title 1 A  B   C 
Title 1a D  E 

Поэтому мне нужно каждую строку, чтобы 1-й элемент в выходном массиве в качестве заголовка, а затем пунктов 2 по 11 из выходного массива приходят из таблицы 3.

Надеюсь, что имеет смысл.

Спасибо, что помогли мне в этом.

дополненного (Подойдя ближе, или, по крайней мере, я больше не сообщение об ошибке, полученный псевдоним):

SELECT t1.t1ID, t1.Title, GROUP_CONCAT(t3.Value) AS value 
FROM Table1 AS t1 
JOIN Table3 AS t3 ON t3.t1ID = t1.t1ID 
GROUP BY t3.t1ID 
ORDER BY t1.t1ID 

Все, что мне нужно сейчас сделать, это иметь Таблица 3 отсортирован в t2ID ORDER

Может ли кто-нибудь помочь с этим?

ответ

2

Вы можете сортировать group_concat() вывод следующим образом:

SELECT 
    t1.t1ID, 
    t1.Title, 
    GROUP_CONCAT(t3.Value order by t2ID) AS value 
FROM Table1 AS t1 
JOIN Table3 AS t3 ON t3.t1ID = t1.t1ID 
GROUP BY t3.t1ID 
ORDER BY t1.t1ID 

Обратите внимание на order byвgroup_concat() вызова.

+0

На самом деле, мне нужно отсортировать столбец t2ID в таблице3, а не в столбце «Значения» @Bohemian –

+0

Итак, я изменил ваш целевой столбец ORDER BY - и IT WORKED !!! Потрясающие. Спасибо @Bohemian –

+1

Рад помочь. Я отредактировал ответ, чтобы включить твой настрой. – Bohemian

1

Вы не можете легко это сделать с MySQL, но функция GROUP_CONCAT, вероятно, сработает для вас. Запрос будет выглядеть следующим образом:

SELECT Title, GROUP_CONCAT(Value) AS values 
FROM Table1 AS t1 
    JOIN (
     SELECT t1ID, Value FROM Table3 ORDER BY t2ID ASC 
    ) AS t2 USING(t1ID) 
GROUP BY t1ID 

Результат этого запроса будет что-то вроде

Title | values 
---------|------- 
Title 1 | A,B,C 
Title 1a | D,E 

Вы тогда должны быть в состоянии взорвать строку значений в массив. Если вам абсолютно необходимо наводить данные, this question имеет более полезную информацию.

Редактировать: Богемский является правильным, и его метод лучше, чем мой, поскольку он использует JOIN вместо подзапроса.

+0

Спасибо, G-Nugget, взрывающийся будет работать для того, что мне нужно. Я попробую ваше решение и отправлю обратно. Еще раз спасибо –

+0

Я тестирую сейчас - у меня появилось следующее сообщение об ошибке: Каждая производная таблица должна иметь свой собственный псевдоним @ G-Nugget ... Я изучаю его –

+0

Я добавил 'AS ...' для обоих 'FROM', и я до сих пор получаю сообщение об ошибке« Каждая производная таблица должна иметь свой собственный псевдоним » –

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