У меня есть запрос, который включает поиск в базе данных в течение 30 дней.Запросы как с правильным, так и с неправильным выводом приведены ниже:
CORRECT RESULTS:
SELECT
affiliates.member_id,
IFNULL( COUNT(orders.deal_id) , 0 ) AS deals_count,
IFNULL( SUM(orders.quantity) , 0 ) AS deals_quanity
FROM affiliates
LEFT JOIN deals ON affiliates.member_id = deals.member_id
LEFT JOIN orders ON deals.deal_id = orders.deal_id
LEFT JOIN customers_orders_link ON orders.order_id = customers_orders_link.order_id
AND DATE(customers_orders_link.datetime) BETWEEN '2011-06-01' AND '2011-07-01'
AND customers_orders_link.order_status = 'Delivered'
GROUP BY affiliates.member_id;
ОЖИДАЕМЫЕ И ПОЛУЧЕННЫЕ: (Правильно)
MemberID COUNT SUM
1 11 16
2 0 0
НЕПРАВИЛЬНЫЕ РЕЗУЛЬТАТЫ:
//Notice the change in the date range
SELECT
affiliates.member_id,
IFNULL( COUNT(orders.deal_id) , 0 ) AS deals_count,
IFNULL( SUM(orders.quantity) , 0 ) AS deals_quanity
FROM affiliates
LEFT JOIN deals ON affiliates.member_id = deals.member_id
LEFT JOIN orders ON deals.deal_id = orders.deal_id
LEFT JOIN customers_orders_link ON orders.order_id = customers_orders_link.order_id
AND DATE(customers_orders_link.datetime) BETWEEN '2011-10-01' AND '2011-10-31'
AND customers_orders_link.order_status = 'Delivered'
GROUP BY affiliates.member_id
ОЖИДАЕМЫЕ:
MemberID COUNT SUM
1 0 0
2 0 0
НО Я ПОЛУЧУ: (НЕПРАВИЛЬНЫЙ ВЫХОД)
MemberID COUNT SUM
1 11 16
2 0 0
Первый запрос дает правильные результаты, тогда как второй запрос дает неправильные результаты.Даже если я использую дату в прошлом в качестве диапазона, я все равно получаю тот же Неверный вывод.Это как если бы запрос полностью игнорировал спецификацию диапазона дат.Таким образом, этот случай игнорирования спецификации диапазона дат, по-видимому, является проблемой.
Как я могу заставить запрос «видеть» и «подчиняться» спецификации диапазона дат и фактически получать ожидаемый результат для 2-го запроса, указанного выше?
РЕДАКТ. 1:
//Table: Orders
order_id deal_id quantity price
1 1 2 40.00
1 2 1 15.00
2 1 1 20.00
3 9 1 5.00
4 1 2 40.00
4 9 2 10.00
5 1 1 20.00
5 9 1 5.00
6 1 2 40.00
6 9 2 10.00
7 1 1 20.00
8 11 1 1.00
//Table: customers_orders_link
order_id customer_id order_status datetime
1 4 Cancelled 2011-06-05 20:26:45
2 4 Delivered 2011-06-05 20:38:28
3 4 Pending Payment 2011-06-05 20:56:50
4 4 Pending Payment 2011-06-09 17:03:08
5 4 Pending Payment 2011-06-09 17:12:23
6 4 Pending Payment 2011-06-09 17:19:57
7 4 Pending Payment 2011-06-09 17:40:59
8 4 Pending Payment 2011-06-10 03:55:17