Mysql按天选择每个类别的总计

Mysql按天选择每个类别的总计,mysql,Mysql,我有三张桌子 类别表格 身份证号码 项目表格 id |编号|类别id 订单表格 id |项目id |日期|时间 我试图为在查询期间至少有一个订单的每个类别选择每天的总订单 预期结果: Date Category Total 2013-12-01 001 6 2013-12-01 002 0 2013-12-01 003 1 2013-12-02 001 14 2013-12-02 002 2 2013-12-02 003

我有三张桌子

类别
表格

身份证号码

项目
表格

id |编号|类别id

订单
表格

id |项目id |日期|时间

我试图为在查询期间至少有一个订单的每个类别选择每天的总订单

预期结果:

Date        Category Total
2013-12-01  001      6
2013-12-01  002      0
2013-12-01  003      1
2013-12-02  001      14
2013-12-02  002      2
2013-12-02  003      0
2013-12-03  001      11
2013-12-03  002      4
2013-12-03  003      4
我试过很多方法,但都不管用。我找到了这个,并相应地添加了一个日历表,但这也不起作用

SELECT calendar.datefield AS DATE, categories.number, count(orders.id) 
FROM categories
LEFT JOIN items on categories.id = items.cat_id
LEFT JOIN orders on items.id = order.item_id
RIGHT JOIN calendar ON DATE(orders.order_date) = calendar.datefield
WHERE calendar.datefield BETWEEN '2013-11-01' AND '2013-11-06'
GROUP BY DATE, categories.number asc

谢谢

更新:您可以这样做

SELECT d.date, d.cat_id, COALESCE(o.total, 0) total
  FROM
(
  SELECT c.date, i.cat_id
    FROM calendar c CROSS JOIN 
  (
    SELECT DISTINCT i.cat_id
      FROM orders o JOIN items i
        ON o.item_id = i.id
     WHERE o.order_date >= '2013-11-01'
       AND o.order_date < '2013-11-07'
  ) i
   WHERE c.date BETWEEN '2013-11-01' AND '2013-11-06'
) d LEFT JOIN 
(
  SELECT DATE(o.order_date) date, i.cat_id, COUNT(DISTINCT o.id) total
    FROM orders o JOIN items i
        ON o.item_id = i.id
     WHERE o.order_date >= '2013-11-01'
       AND o.order_date < '2013-11-07'
   GROUP BY DATE(o.order_date), i.cat_id
) o
     ON d.date = o.date
    AND d.cat_id = o.cat_id
 ORDER BY d.date, d.cat_id

这里是演示

请看。我已经尝试了我有限的mysql库中的所有内容。请给出一个或多个您尝试过的示例。请查看更新的问题您从发布的查询中获得了什么输出?快速看一眼让我觉得你会得到想要的结果;这似乎是正确的。请发布一个它返回的小样本。这一个不会给我零。你想每天列出每个类别吗?是的,每个类别在时间段内至少有一个订单。现在我必须研究这个查询,以便我知道我在做什么,而不仅仅是一个复制品。你非常欢迎;)请参阅更新的答案以获取简短的解释 +------------+--------+-------+ | date | cat_id | total | +------------+--------+-------+ | 2013-11-01 | 1 | 0 | | 2013-11-01 | 2 | 0 | | 2013-11-01 | 3 | 1 | | 2013-11-02 | 1 | 0 | | 2013-11-02 | 2 | 0 | | 2013-11-02 | 3 | 1 | | 2013-11-03 | 1 | 1 | | 2013-11-03 | 2 | 0 | | 2013-11-03 | 3 | 3 | | 2013-11-04 | 1 | 1 | | 2013-11-04 | 2 | 0 | | 2013-11-04 | 3 | 2 | | 2013-11-05 | 1 | 3 | | 2013-11-05 | 2 | 0 | | 2013-11-05 | 3 | 3 | | 2013-11-06 | 1 | 1 | | 2013-11-06 | 2 | 1 | | 2013-11-06 | 3 | 3 | +------------+--------+-------+