2016-04-14 6 views
0

У меня есть две таблицы MySQL. Один содержит записи формы, а другой содержит пары ключ/значения для поиска.MySQL - Преобразование закодированных значений на основе таблицы поиска ключей/значений

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

Table 1 : form_123 

id | element_6 | element_7 | element_8 | element_9 
1  1   6    3   6 
2  4   7    2   4 
3  3   3    5   2 


Table 2 : Options 

id | formid | option_id | option_name 
1  123    1   sausages 
2  123    2   bananas 
3  123    3   grapes 
4  123    4   fish 
5  123    5   bread 
6  123    6   buckfast 
7  123    7   foo 
8  123    8   bar 
9  123    9   apples 
10  123   10   oranges 

Самый элегантный запрос MySQL, чтобы обеспечить следующий вывод. Цель состоит в том, чтобы преобразовать коды поиска ключей/значений в таблицу form_123 в значения поиска через один оператор select, если это возможно.

id | element_6 | element_7 | element_8 | element_9 
1 sausages  buckfast  grapes buckfast 
2  fish  foo   bananas fish 
3  grapes  grapes  bread  bananas 
+0

Отредактировано для исправления ожидаемого выхода – brianilland

ответ

2

Использование INNER JOIN (s), как этот

SELECT f.id, 
     o6.option_name as element_6, 
     o7.option_name as element_7, 
     o8.option_name as element_8, 
     o9.option_name as element_9 
FROM form_123 f 
INNER JOIN options o6 ON f.element_6 = o6.option_id 
INNER JOIN options o7 ON f.element_7 = o7.option_id 
INNER JOIN options o8 ON f.element_8 = o8.option_id 
INNER JOIN options o9 ON f.element_9 = o9.option_id 
ORDER BY f.id ASC 

sqlfiddle ваш образец желаемого выхода, кажется, от BTW.

выход

id element_6  element_7  element_8  element_9 
1 sausages  buckfast  grapes   buckfast 
2 fish   foo    bananas   fish 
3 grapes   grapes   bread   bananas 

, если у вас есть больше FormID (ы) приходит вы можете добавить где все formids 123 как этот

SELECT f.id, 
     o6.option_name as element_6, 
     o7.option_name as element_7, 
     o8.option_name as element_8, 
     o9.option_name as element_9 
FROM form_123 f 
INNER JOIN options o6 ON f.element_6 = o6.option_id 
INNER JOIN options o7 ON f.element_7 = o7.option_id 
INNER JOIN options o8 ON f.element_8 = o8.option_id 
INNER JOIN options o9 ON f.element_9 = o9.option_id 
WHERE o6.formid = 123 
    AND o7.formid = 123 
    AND o8.formid = 123 
    AND o9.formid = 123 
ORDER BY f.id ASC 

или вы можете просто добавить и FormID = 123 состояние в состоянии ВКЛ, подобное этому

SELECT f.id, 
     o6.option_name as element_6, 
     o7.option_name as element_7, 
     o8.option_name as element_8, 
     o9.option_name as element_9 
FROM form_123 f 
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123 
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123 
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123 
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123 
ORDER BY f.id ASC 
Смежные вопросы