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