当前位置:  开发笔记 > 编程语言 > 正文

PHP和MySQL:进行化学反应

如何解决《PHP和MySQL:进行化学反应》经验,为你挑选了1个好方法。

我有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



1> Lukasz Szozd..:

什么是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_itemreid用作外键.

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)           ?
????????????????????????????????????????????????????????????????

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有