2016-11-30 57 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語言的所有細節。如果en不存在,如何修改它以使用默認語言選擇詳細信息?

+0

歡迎來到SO。 請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic) 和[如何提出一個好問題](http://stackoverflow.com/help/how-to - 問) 和[完美的問題](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',''等來描述,但並不是每種語言都是不對稱的。我想從指定語言的連接表中選擇行,但如果沒有使用此語言的描述,我想選擇默認語言(始終存在)的行。 –

+0

當你運行'left join'到描述表時,你會在d2.description列中看到null。然後你可以通過'if'功能選擇默認值或翻譯值。 –

+0

'select p.id,coalesce(d2.description,d1.description)as description, from product p加入productDetails d1 on p.id = d1.product_id and d1.language ='default' left join productDetails d2 在p.id = d2.product_id和d2.language ='en'' 上運作良好。謝謝。 –

相關問題