【问题标题】:mysql combine 3 queries into one with SUM of 3 categoriesmysql 将 3 个查询合并为 3 个类别的总和
【发布时间】:2013-12-29 08:42:12
【问题描述】:

我想将 3 个查询合并为一个以便于访问

$query = "SELECT r.member_id, m.name, m.class, m.classid, m.level,m.guild_title, SUM(achie_points) total_pvp\n"
. "FROM roster_addons_achievements_achievements as r\n"
. "LEFT JOIN roster_addons_achievements_achie AS c \n"
. "ON r.achie_id = c.achie_id\n"
. "LEFT JOIN roster_members AS m\n"
. "ON r.member_id = m.member_id\n"
. "WHERE c.c_id = 95 OR c.p_id = 95\n"
. "GROUP BY r.member_id,m.name\n"
. "ORDER BY r.member_id ASC";

给我 c_id 95 和 p_id 95 的 SUM(achie_points)

$query2 = "SELECT r.member_id, SUM(achie_points) total_arena\n"
. "FROM roster_addons_achievements_achievements as r\n"
. "LEFT JOIN roster_addons_achievements_achie AS c \n"
. "ON r.achie_id = c.achie_id\n"
. "LEFT JOIN roster_members AS m\n"
. "ON r.member_id = m.member_id\n"
. "WHERE c.c_id = 165\n"
. "GROUP BY r.member_id,m.name\n"
. "ORDER BY r.member_id ASC";

给我 c_id 165 的 SUM(achie_points)

$query3 = "SELECT r.member_id, SUM(achie_points) total_rbg\n"
. "FROM roster_addons_achievements_achievements as r\n"
. "LEFT JOIN roster_addons_achievements_achie AS c \n"
. "ON r.achie_id = c.achie_id\n"
. "LEFT JOIN roster_members AS m\n"
. "ON r.member_id = m.member_id\n"
. "WHERE c.c_id = 15092\n"
. "GROUP BY r.member_id,m.name\n"
. "ORDER BY r.member_id ASC";

给我 c_id 15092 的 SUM(achie_points)

结合 3 的问题是 c_id 95、165 和 15092 的 SUM(achie_points) 任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试在 query2 中使用 c.c_id in (95,165,15092) 来获得总和?

标签: php mysql sum multiple-tables


【解决方案1】:
$query = "SELECT r.member_id, m.name, m.class, m.classid, m.level,m.guild_title,
                 SUM(IF(c.c_id = 95 OR c.p_id = 95, achie_points, 0)) total_pvp,
                 SUM(IF(c.c_id = 165, achie_points, 0)) total_arena,
                 SUM(IF(c.c_id = 15092, achie_points, 0)) total_rbg
          FROM roster_addons_achievements_achievements as r
          LEFT JOIN roster_addons_achievements_achie AS c 
          ON r.achie_id = c.achie_id
          LEFT JOIN roster_members AS m
          ON r.member_id = m.member_id
          WHERE c.c_id IN (95, 165, 15092) OR c.p_id = 95
          GROUP BY r.member_id,m.name
          ORDER BY r.member_id ASC";

【讨论】:

  • 太棒了!效果很好,非常感谢,我已经尝试了好几个星期了,没想到这么快就得到了答案,哈哈
【解决方案2】:

您也可以通过union 运算符组合它们,但是这 3 个查询必须具有相同的输出格式。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2021-06-20
    • 2010-11-04
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多