Вот наша цель:
Мы хотим выбрать каждый месяц и доход, полученный за каждый месяц, для конкретного пользователя.
Вотнаши таблицы
продукт, покупка, пользователь, месяцы
пользователь 1 .. * продукт, продукт 1 .. * покупка
продукт имеет столбец 'user_id'и покупка имеет столбец 'product_id'
months - это просто таблица, которая содержит каждый месяц в виде строки.В настоящее время мы используем это, чтобы сделать несколько левых объединений, как вы можете видеть ниже.
SELECT months.name, IFNULL(sum(purchase.price), 0) as revenue
FROM months
LEFT JOIN purchase
ON DATE_FORMAT(purchase.purchase_date, '%M') = months.name
AND DATE_FORMAT(purchase_date, '%Y') = DATE_FORMAT(CURRENT_DATE, '%Y')
AND purchase.status = 2
GROUP BY name
ORDER BY months.id ASC;
, который отлично работает для ВСЕХ пользователей и ВСЕХ покупок, совершенных в этом месяце (статус покупки 2 означает завершение),Следующая часть - как мне отфильтровать это на основе идентификатора пользователя?В таблице «product» указан искомый идентификатор пользователя, а в таблице «product» указан «product_id».Каждый раз, когда я пытаюсь что-то сделать, он либо ничего не делает, либо удаляет все нулевые значения, которые нам не нужны.
ATTEMPT @ NathanialWools Предложение where удаляет все строки снулевой доход (или ноль, из-за оператора IFNULL).Вот что я попробовал:
SELECT name, IFNULL(sum(purchase.price), 0) as revenue
FROM months
LEFT JOIN purchase
ON DATE_FORMAT(purchase.purchase_date, '%M') = months.name
AND DATE_FORMAT(purchase_date, '%Y') = DATE_FORMAT(CURRENT_DATE, '%Y')
AND purchase.status = 2
LEFT JOIN product
ON product.id = purchase.product_id
WHERE product.user_id = 1
GROUP BY name
ORDER BY months.id ASC;