Я собираюсь сделать несколько гистограмм для подсчета продаж товаров по дням, месяцам и годам.Проблема, с которой я сталкиваюсь, состоит в том, что мои простые запросы MySQL возвращают счетчики только там, где есть значения для подсчета.Он волшебным образом не заполняет даты, когда даты не существуют и продажи товаров = 0.Это вызывает у меня проблемы при попытке заполнить таблицу, например, потому что не представлены все недели в данном году, представлены только недели, в которых были проданы предметы.
Мои таблицы и поля выглядят следующим образом:
items table: account_id and item_id
// table keeping track of owners' items
items_purchased table: purchaser_account_id, item_id, purchase_date
// table keeping track of purchases by other users
calendar table: datefield
//table with all the dates incremented every day for many years
вот первый запрос, о котором я говорил выше:
SELECT COUNT(*) as item_sales, DATE(purchase_date) as date
FROM items_purchased join items on items_purchased.item_id=items.item_id
where items.account_id=125
GROUP BY DATE(purchase_date)
Я прочитал, что мне нужно объединить таблицу календаря с таблицами, в которых происходит подсчет.Я сделал это, но теперь я не могу заставить первый запрос нормально воспроизводить этот 2-й запрос, потому что объединение в первом запросе исключает даты из результата запроса, где продажи элементов равны 0.
вот второй запроскоторый нужно как-то объединить с 1-м запросом, чтобы получить результаты, которые я ищу:
SELECT calendar.datefield AS date, IFNULL(SUM(purchaseyesno),0) AS item_sales
FROM items_purchased join items on items_purchased.item_id=items.item_id
RIGHT JOIN calendar ON (DATE(items_purchased.purchase_date) = calendar.datefield)
WHERE (calendar.datefield BETWEEN (SELECT MIN(DATE(purchase_date))
FROM items_purchased) AND (SELECT MAX(DATE(purchase_date)) FROM items_purchased))
GROUP BY date
// this lists the sales/day
// to make it per week, change the group by to this: GROUP BY week(date)
Ошибка этого 2-го запроса в том, что он не считает item_sales на account_id
(человекпытаюсь продать предмет пользователям purchaser_account_id
).Первый запрос делает, но не все даты, когда продажи товара = 0.Так что да, расстраивает.
Вот как я хотел бы, чтобы итоговые данные выглядели (ПРИМЕЧАНИЕ: это то, что было продано account_id = 125, у других людей за этот период времени разные цифры):
2012-01-01 1
2012-01-08 1
2012-01-15 0
2012-01-22 2
2012-01-29 0
Вот как выглядит текущий 1-й запрос:
2012-01-01 1
2012-01-08 1
2012-01-22 2
Если бы кто-нибудь мог дать какой-то совет по этому поводу, я был бы очень признателен.