php - Mysql将合并应用于所有找到的记录

标签 php mysql

假设我有一组关系,并且对于这些关系中的每一个,我都有特征。在函数中,我查询以获取所有关系以及附加到该关系的所有特征。每个特征都有某种语言的内容。 如果我有 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;

关于php - Mysql将合并应用于所有找到的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50610278/

相关文章:

php - 如何在 PHP 中从多个变量创建一个变量?

mysql - 为什么/如何能够超过 MySQL 中 varchar 的配置长度? 【我的错,我不能】

php - 根据文本输入字段填充省份下拉菜单

php - 如何将此数据文件导入 Mysql 表

php - 随机排列图像数组

php - 我已经搜索了 FOSUserBundle 私有(private)资料,但无济于事

php - 将旧的 mysql 与 PDO 混合

mysql - 选择 ID ='123' || other_col = other_call

mysql - mysql查询codeigniter中的if语句

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源