Php 合并两个单独工作的MySQL查询

Php 合并两个单独工作的MySQL查询,php,mysql,database,Php,Mysql,Database,结果:month\u目标=9000 SELECT sum(monthly_target) as month_target FROM `tbl_goal` inner join user on tbl_goal.uid=user.id where user.store=1 and month='February' 结果:实现=103根头发\u总数=63根胡须\u总数=40个产品\u总数=0 SELECT sum(monthly_target) as month_target FROM `

结果:month\u目标=9000

SELECT sum(monthly_target) as month_target
FROM `tbl_goal`
inner join user
    on tbl_goal.uid=user.id where user.store=1 and month='February'
结果:实现=103根头发\u总数=63根胡须\u总数=40个产品\u总数=0

SELECT sum(monthly_target) as month_target
FROM `tbl_goal`
inner join user
    on tbl_goal.uid=user.id where user.store=1 and month='February'

请给我一些提示,如何将这些合并为一个?

棘手的一个。当前的联接条件意味着您希望按用户聚合,但
WHERE
子句明确表示您希望存储级聚合。因此,我们可以尝试重写查询以按存储聚合。下面两个子查询中的每一个子查询都执行单独的聚合,通过与用户表的联接引入
存储
id。然后,在外部,我们将
user
表加入到每个子查询中

SELECT
    sum(net) as achieved,
    sum(hairs_total) as hairs_total,
    sum(beard_total) as beard_total,
    sum(product_total) as product_total
FROM `data`
inner join user
    on data.uid=user.id where user.store=1 and month='February'
SELECT
  sum(monthly_target) as month_target,
  sum(net) as achieved,
  sum(hairs_total) as hairs_total,
  sum(beard_total) as beard_total,
  sum(product_total) as product_total
FROM
  user
  inner join `tbl_goal` on tbl_goal.uid = user.id
  inner join `data` on data.uid = user.id
where
  user.store = 1
  and month = 'February'

如果需要所有存储的报告,只需删除外部的
WHERE
子句。

一个。当前的联接条件意味着您希望按用户聚合,但
WHERE
子句明确表示您希望存储级聚合。因此,我们可以尝试重写查询以按存储聚合。下面两个子查询中的每一个子查询都执行单独的聚合,通过与用户表的联接引入
存储
id。然后,在外部,我们将
user
表加入到每个子查询中

SELECT
  sum(monthly_target) as month_target,
  sum(net) as achieved,
  sum(hairs_total) as hairs_total,
  sum(beard_total) as beard_total,
  sum(product_total) as product_total
FROM
  user
  inner join `tbl_goal` on tbl_goal.uid = user.id
  inner join `data` on data.uid = user.id
where
  user.store = 1
  and month = 'February'

如果您想要所有存储的报告,只需删除外部
WHERE
子句。

使用多个内部联接即可。 试试这个

SELECT
    u.store,
    COALESCE(t1.achieved, 0) AS achieved,
    COALESCE(t1.hairs_total, 0) AS hairs_total,
    COALESCE(t1.beard_total, 0) AS beard_total,
    COALESCE(t1.product_total, 0) AS product_total,
    COALESCE(t2.month_target 0) AS month_target
FROM user u
LEFT JOIN
(
    SELECT
        usr.store,
        SUM(d.net) AS achieved,
        SUM(d.hairs_total) AS hairs_total,
        SUM(d.beard_total) AS beard_total,
        SUM(d.product_total) AS product_total
    FROM data d
    INNER JOIN user usr
        ON d.uid = usr.id
    WHERE d.month = 'February'
    GROUP BY usr.store
) t1
    ON u.store = t1.store
LEFT JOIN
(
    SELECT
        usr.store,
        SUM(t.monthly_target) AS month_target
    FROM tbl_goal t
    INNER JOIN user usr
        ON t.uid = usr.id
    WHERE t.month = 'February'
    GROUP BY usr.store
) t2
    ON u.store = t2.store;
WHERE
    u.store = 1;

使用多个内部联接来实现这一点。 试试这个

SELECT
    u.store,
    COALESCE(t1.achieved, 0) AS achieved,
    COALESCE(t1.hairs_total, 0) AS hairs_total,
    COALESCE(t1.beard_total, 0) AS beard_total,
    COALESCE(t1.product_total, 0) AS product_total,
    COALESCE(t2.month_target 0) AS month_target
FROM user u
LEFT JOIN
(
    SELECT
        usr.store,
        SUM(d.net) AS achieved,
        SUM(d.hairs_total) AS hairs_total,
        SUM(d.beard_total) AS beard_total,
        SUM(d.product_total) AS product_total
    FROM data d
    INNER JOIN user usr
        ON d.uid = usr.id
    WHERE d.month = 'February'
    GROUP BY usr.store
) t1
    ON u.store = t1.store
LEFT JOIN
(
    SELECT
        usr.store,
        SUM(t.monthly_target) AS month_target
    FROM tbl_goal t
    INNER JOIN user usr
        ON t.uid = usr.id
    WHERE t.month = 'February'
    GROUP BY usr.store
) t2
    ON u.store = t2.store;
WHERE
    u.store = 1;


这可能不起作用,因为它会导致重复计算。即使用户表与两个表都有关系?上面的查询给了我错误:静态分析:在分析过程中发现了2个错误。此类型的子句以前已分析过。(位置321的“内部联接”附近)无法识别的语句类型。(位置321的“内部联接”附近)这可能不起作用,因为它会导致重复计数。即使用户表与两个表都有关系?上面的查询给我错误:静态分析:分析期间发现2个错误。此类型的子句以前已分析过。(位置321的“内部联接”附近)无法识别的语句类型。(位置321的“内部联接”附近)这可能会导致重复计算。它给出的结果与我想要的不一样:月\目标=11500已实现=412头发\总数=252胡须\总数=160产品\总数=0这是您期望的实际结果还是您从上面的查询中得到的结果?我从上面的查询中得到的结果。我的预期结果有问题。感谢这可能会导致重复计算。它给出的结果与我想要的不一样:月\目标=11500已实现=412根头发\总数=252胡须\总数=160个产品\总数=0这是您期望的实际结果还是您从上述查询中得到的结果?我从上述查询中得到的结果。我的预期结果有问题。感谢您再次检查它,因为它给了我错误:#1305-函数COALESECE没有exist@VishalHira抱歉,这是
COALESCE
的输入错误。您没有向我们提供任何数据,因此我们无法测试我们的查询。它像一个符咒一样工作:)感谢COALESCE(MAX(t2.monthly_target)的错误消失你能不能再检查一下,因为它给我的错误是:#1305-函数COALESECE不存在exist@VishalHira很抱歉,这是对
COALESCE
的输入错误。您没有向我们提供任何数据,因此我们无法测试我们的查询。它工作得很好:)感谢COALESCE出现的错误(最大值(t2.monthly\u target)