假设我有一组关系,对于这些关系中的每一个,我都有特征。在函数中,我查询以获取附加到该关系的所有关系和所有特征。每个功能都有某种语言的内容。 如果我有 3 个功能,这些功能翻译的示例表将是
Relation1 -> F1-EN, F2-EN, F3-EN
-> F1-DE, F2-DE, -
-> F1-SP, - , F3-SP
-> F1-FR, - , -
Relation2 ....
我希望能够根据我发送的主要语言获得所有这些功能,将 DE 作为我应该获得的主要语言发送
F1-DE, F2-DE, F3-EN (因为 F3 的 DE 值为空(
-- get relation fields --,
GROUP_CONCAT(DISTINCT coalesce(ft2.name, ft1.name) SEPARATOR ',') AS features
FROM 'relations'
LEFT JOIN 'feature_translations' ft1 ON relations.feature_id =
ft1.feature_id
LEFT JOIN 'feature_translations' ft2 ON relations.feature_id =
ft2.feature_id AND ft2.language_id = 'FR'
GROUP BY relations.relation_id
有了这个,我只能得到 (F1-FR(,因为合并返回第一个非空值,但我想要所有功能 F1-FR、F2-EN、F3-EN
编辑:
我试图用sqlfiddle("DE"作为主要语言(重现您的问题。
您可能需要两个分组
SELECT f.relation_id, GROUP_CONCAT(f.feature) as features
FROM
(SELECT relations.relation_id, coalesce(ft1.name, ft2.name) AS feature
FROM relations
LEFT JOIN feature_translations ft1 ON relations.feature_id =
ft1.feature_id AND ft1.language_id = 'DE'
LEFT JOIN feature_translations ft2 ON relations.feature_id =
ft2.feature_id AND ft2.language_id != 'DE'
GROUP BY relations.relation_id, relations.feature_id) as f
GROUP BY f.relation_id;