不限制where语句

时间:2013-01-14 16:25:32

标签: php mysql

我的帐户有与之相关的类别&订单表,其中订单可以是债务或信用,基于“order_type”字段&支付表,存储支付日期和金额(没有用于债务或信用的负数)。

目前我正在使用这样的东西:

SELECT cat, SUM(p.amount) balance
FROM accounts a 
LEFT JOIN orders o ON a.id = o.account_id
LEFT JOIN payments p ON o.id = p.order_id
WHERE YEAR(p.date) = 2012
GROUP BY a.cat

第一期:

这会把所有的钱视为错误的付款,我试图使用

sum(IF(o.order_type = 1, p.amount, p.amount * -1 ))

未能给出正确的结果,因为所有金额都是负数。

第二期:

它不会显示没有付款的类别,这里的限制因素是我需要确保我只计算2012年付款的日期,但如果没有付款,我还想显示所有类别的零制成。

我接近错误的方式吗?

如果有人知道这两个问题或两者的解决方案,请提供您的解决方案。

2 个答案:

答案 0 :(得分:1)

SELECT cat, SUM(p.amount) balance
FROM accounts a 
LEFT JOIN orders o
  ON a.id = o.account_id
     AND o.order_type = 1
LEFT JOIN payments p
  ON o.id = p.order_id
     AND YEAR(p.date) = 2012
GROUP BY a.cat

年度检查必须处于JOIN条件,而不是WHERE,因此不会排除没有付款的类别。

答案 1 :(得分:0)

尝试这样的事情:

SELECT cat, SUM(p.amount) balance
FROM accounts a 
LEFT JOIN orders o
  ON a.id = o.account_id
     AND o.order_type = 1
LEFT JOIN payments p
  ON o.id = p.order_id
WHERE YEAR(p.date) = 2012
GROUP BY a.cat

但我建议澄清您的数据库架构,以便在您的客户付清或欠债时更明显。