1
我有一張表,用於存儲我希望從中提取最相關數據的語言信息。如果您要求的語言可用,則應該使用該語言。如果不是,那麼它應該返回一個默認值。從MySQL中的每個分組數據中獲取單個記錄
的數據是這樣的:
ID PARENT_ID NAME LANG
1 1 test default
2 1 test en-GB
3 1 test fr
4 4 Hello default
5 4 Hello en-GB
6 4 Hola es
如果我想獲得的所有西班牙語的結果,那麼我應該能夠得到記錄6和記錄1,因爲第一套不包含西班牙語版。我會怎麼做呢?
這是最接近我可以查詢得到,但我總是得到默認,從來沒有西班牙的結果:
SELECT h_id,
h_faq_id,
h_question,
h_language
FROM
h_itsm_faqs
WHERE
h_language = 'default'
OR
h_language LIKE 'es'
GROUP BY
h_faq_id
ORDER BY
(CASE WHEN h_language LIKE 'es' THEN 1 ELSE 2 END) ASC
我看到的選項如下:
- 一查詢以獲得兩個(不知道如何做到這一點)
- 兩個查詢來獲得語言和默認值,然後找出我需要的
- 獲取所有結果並通過它們排序
選項1會很棒,但值得注意的是,選項3在分頁時可能會出現問題。
爲什麼比較字符串首先與'='和後來用'LIKE'比較? – Oli
另外,您的GROUP BY會在ORDER BY發生之前摺疊數據,所以您總是會得到默認的 – Oli
@Oli對於我來說''''或'LIKE'對我無關緊要,但我們確保了默認總是小寫字母,並且僅適用於語言有時可能會大寫的情況,因爲數據可能來自多個來源。我懷疑'GROUP BY'發生了什麼,但希望'CASE'和'ORDER BY'會首先發生。 – cchana