我有2个表1- tbl_reaction
这样:
????????????????????????????????????????? ? id ? condition ? phenomenon ? infor ? ????????????????????????????????????????? ? 1 ? abcd123 ? abcd123 ? abcd123 ? ? 2 ? wer ? wer ? wer ? ?????????????????????????????????????????
2- tbl_reaction_item
像这样:
???????????????????????????????????? ? reid ? substance ? type ? num ? ???????????????????????????????????? ? 1 ? H2 ? income ? 2 ? ? 1 ? O2 ? income ? 1 ? ? 1 ? H2O ? outcome ? 2 ? ????????????????????????????????????
什么是mysql查询来显示反应:
收入+收入=结果
2H2 + O2 => 2H2O
什么是mysql查询来显示这样的反应:(收入+收入=>结果)H2 + O2 => H2O
SELECT CONCAT(GROUP_CONCAT(CASE WHEN type='income' THEN CONCAT(IF(num=1, '', num),substance) END SEPARATOR ' + '), ' => ', GROUP_CONCAT(CASE WHEN type='outcome' THEN CONCAT(IF(num=1, '', num),substance) END SEPARATOR ' + ')) AS reaction FROM tbl_reaction_item GROUP BY reid;
SqlFiddleDemo
输出:
???????????????????? ? reaction ? ???????????????????? ? 2H2 + O2 => 2H2O ? ????????????????????
这个怎么运作:
利用GROUP_CONCAT
自定义分隔符' + '
构建左侧和右侧.
使用CONCAT
与加盟两面=>
使用条件聚合分别获得收入/结果
删除num 1
使用IF
功能(也可以使用CASE
)
考虑添加位置列以使用以下内容始终获得连续字符串部分的相同顺序GROUP_CONCAT(... ORDER BY pos)
:
??????????????????????????????????????????? ? reid ? substance ? type ? num ? pos ? ??????????????????????????????????????????? ? 1 ? H2 ? income ? 2 ? 1 ? -- hydrogen always first ? 1 ? O2 ? income ? 1 ? 2 ? -- second oxygen ? 1 ? H2O ? outcome ? 2 ? 1 ? ???????????????????????????????????????????附录
您应该更改您的架构.将主键添加到外键tbl_reaction_item
并reid
用作外键.
SELECT t1.*, t2.reaction FROM tbl_reaction t1 LEFT JOIN ( SELECT reid, CONCAT(GROUP_CONCAT(CASE WHEN type='income' THEN CONCAT(IF(num=1, '', num),substance) END SEPARATOR ' + '), ' => ', GROUP_CONCAT(CASE WHEN type='outcome' THEN CONCAT(IF(num=1, '', num),substance) END SEPARATOR ' + ')) AS reaction FROM tbl_reaction_item GROUP BY reid ) t2 ON t1.id = t2.reid
SqlFiddleDemo2
输出:
???????????????????????????????????????????????????????????????? ? id ? condition ? phenomenon ? infor ? reaction ? ???????????????????????????????????????????????????????????????? ? 1 ? abcd123 ? abcd123 ? abcd123 ? 2H2 + O2 => 2H2O ? ? 2 ? wer ? wer ? wer ? (null) ? ????????????????????????????????????????????????????????????????