2012-05-21 6 views
0

У меня есть следующая ситуация.Два внешних ключей в одной колонке. Как разбить?

Комбинация Таблица:
Combination ID | Option ID's

Параметры Таблица:
Option ID | Option Name | Option Value

опция «удостоверение личности» столбец в таблице комбинаций читается как «2345,3421» (в одном столбце), когда ссылается к два варианта, связанные с комбинацией.

Возможно ли создать список, в котором перечислены все возможные комбинации и значения для каждой комбинации?

ie. combination1 | option1 | name:size | value:Small | option2 | name:color | value:Blue

+0

Не в какой-либо чистым способом. Вы нарушили первую нормальную форму, и усложнение, которое вы испытываете, - это цена на это. –

+0

это был не я :) это от работы с корзиной покупок. – jason3w

+0

Достаточно честный. В любом случае будет интересно увидеть некоторые предложения. К сожалению, это, вероятно, будет включать множество и множество уродливых предикатов. Такие вещи можно сделать, но это не красиво. –

ответ

1

Вы можете попробовать запрос, как это -

SELECT 
    c.Combination_ID, GROUP_CONCAT(CONCAT(o.Option_Name, '=', o.Option_Value)) 
FROM 
    combinations c 
LEFT JOIN options o 
    ON find_in_set(o.Option_ID, c.Option_IDs) 
GROUP BY 
    c.Combination_ID 

согласен с Яном McLaird о нормализации таблицы.


SELECT 
    c.Combination_ID, 
    GROUP_CONCAT(o.Option_Name), 
    GROUP_CONCAT(o.Option_Value) 
FROM 
    combinations c 
LEFT JOIN options o 
    ON find_in_set(o.Option_ID, c.Option_IDs) 
GROUP BY 
    c.Combination_ID 
+0

legandary! бесконечно благодарен!! – jason3w

+0

еще один вопрос, пока вы заняты потрясающе. Может ли возвращенное o.option_name и значения быть разделены на отдельные столбцы? – jason3w

+0

Я изменил ответ. – Devart

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