कुछ लोग इस दृष्टिकोण को नापसंद करते हैं लेकिन मैं एक डमी टेबल का उपयोग करता हूं जिसमें 0 - 1000 के मान होते हैं और फिर आवश्यक श्रेणियों का उत्पादन करने के लिए व्युत्पन्न तालिका का उपयोग करते हैं -
CREATE TABLE dummy (`num` INT NOT NULL);
INSERT INTO dummy VALUES (0), (1), (2), (3), (4), (5), .... (999), (1000);
यदि आपके पास एक ऑटो-इन्क्रीमेंटिंग आईडी वाली तालिका है और बहुत सारी पंक्तियाँ हैं तो आप इसे उससे उत्पन्न कर सकते हैं -
CREATE TABLE `dummy`
SELECT id AS `num` FROM `some_table` WHERE `id` <= 1000;
बस 0 मान डालना याद रखें।
SELECT CURRENT_DATE - INTERVAL num DAY
FROM dummy
WHERE num < 365
तो, इस दृष्टिकोण को अपनी क्वेरी में लागू करने से आप कुछ ऐसा कर सकते हैं -
SELECT WEEK(calendar.datefield) AS `week`, IFNULL(SUM(purchaseyesno),0) AS item_sales
FROM items_purchased join items on items_purchased.item_id=items.item_id
RIGHT JOIN (
SELECT (CURRENT_DATE - INTERVAL num DAY) AS datefield
FROM dummy
WHERE num < 365
) AS calendar ON (DATE(items_purchased.purchase_date) = calendar.datefield)
WHERE calendar.datefield >= (CURRENT_DATE - INTERVAL 1 YEAR)
GROUP BY week(datefield) -- shouldn't this be datefield instead of date?