MySQL Дата диапазона неверный результат получен - Query игнорирует указанный диапазон - PullRequest
0 голосов
/ 08 июля 2011

У меня есть запрос, который включает поиск в базе данных в течение 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

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Я решил это сам, используя совершенно другой метод.

0 голосов
/ 08 июля 2011

Я не знаю, как выглядят ваши данные, но я подозреваю, что виноваты ваши LEFT JOIN customers_orders_link. Если вы хотите подсчитывать COUNT () и SUM () только при выполнении условий этой таблицы, вместо LEFT JOIN.

должен быть стандарт JOIN.
...