2016-11-30 8 views
-1

У меня есть таблицы Продукт и продуктДетали. В productDetails у меня есть строки с описанием продукта на многих языках (различаются столбцом lang). Не каждый продукт будет иметь описание на каждом языке. Как сделать выбор, который будет выбирать описание на указанном языке (на Where productDescription.lang = 'en'), и это будет выбирать описание на языке по умолчанию, если указанный язык отсутствует (всегда присутствуют описания с языком по умолчанию).Mysql выбрать с Где и по умолчанию, если нет условия

Я сделал это:

select * 
    from product 
    left join productDetails on product.id = productDetails.product_id 
where productDetails.language = 'en'; 

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

+0

Добро пожаловать в SO. Пожалуйста, прочитайте [Какие темы я могу задать] (http://stackoverflow.com/help/on-topic) и [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to -ask) И [идеальный вопрос] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) И как создать [Минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) – RiggsFolly

+0

Что такое код языка по умолчанию? В этом случае это, по-видимому, не «en». –

+0

На каком-либо языке я предпочитаю по умолчанию на веб-странице. Если для некоторых данных нет перевода, они должны отображаться на языке по умолчанию –

ответ

0

Что-то в этом роде. Я не знаю вашу точную схему:

select 
    p.id, 
    if(IS NULL d2.description, d1.description, d2.description) `description` 
from product p 
join productDetails d1 
    on product.id = productDetails.product_id 
     and 
    productDetails.language = 'default_lang' 
left join productDetails d2 
    on product.id = productDetails.product_id 
     and 
    productDetails.language = 'en' 
+0

У меня нет нулей в таблицах. Могут быть строки с описаниями с «pl», «en», «it» и т. Д., Но не каждый язык является облитагорием. Я хочу выбрать строки из объединенных таблиц на указанном языке, но если описания на этом языке нет, я хочу выбрать строку по умолчанию (которая всегда присутствует). –

+0

Когда вы запустите 'left join' в таблицу описания, вы увидите нуль в столбце d2.description. Затем вы можете выбрать функцию 'if' по умолчанию или переведенное значение. –

+0

'выберите p.id, коалесценции (d2.description, d1.description) как описание, из продукта р присоединиться к d1 Детали изделия на p.id = d1.product_id и d1.language = 'по умолчанию' влево присоединиться к d2 Детали изделия на p.id = d2.product_id и d2.language = 'en'' работает хорошо. Благодарю. –