2016-11-14 2 views
0

Я хочу знать количество подкоманд, отвечающих определенным условиям.SQL count возвращает плохой результат

Я хочу подсчитать количество экземпляров, где order_payment_id - «3», и статус которого отправлен, но мне сложно работать с функцией подсчета SQL.

- У меня есть этот первый запрос для отображения результатов в таблице:

SELECT 
    order_id, order_number, lh45p_users.name, lh45p_hikamarket_vendor.vendor_name, order_status, order_created, order_full_price, order_payment_id 
FROM 
    lh45p_hikashop_order 
INNER JOIN 
    lh45p_hikamarket_vendor ON lh45p_hikashop_order.order_vendor_id = lh45p_hikamarket_vendor.vendor_id 
INNER JOIN 
    lh45p_hikashop_user ON lh45p_hikashop_order.order_user_id = lh45p_hikashop_user.user_id 
INNER JOIN 
    lh45p_users ON lh45p_hikashop_user.user_cms_id = lh45p_users.id 
WHERE 
    order_status = 'shipped' AND order_payment_id = '3' 
ORDER BY 
    lh45p_hikashop_order.order_created ASC 

- Вот таблица отображается (я изменил некоторые значения для обеспечения конфиденциальности):

ID | N° de commande | Client | Vendeur | Statut | Date | Prix | 
:---: | :---: | :---: | :---: | :---: | :---: | :---: | 
111 | 2016-0110 | Client 1 | Vendeur 1 | shipped | 29-02-2016 | 94.8 | 
116 | 2016-0115 | Client 2 | Vendeur 2 | shipped | 11-03-2016 | 94.8 | 
131 | 2016-0130 | Client 3 | Vendeur 3 | shipped | 10-04-2016 | 94.2 | 
136 | 2016-0135 | Client 4 | Vendeur 4 | shipped | 16-06-2016 | 219.6 | 
157 | 2016-0156 | Client 5 | Vendeur 5 | shipped | 04-08-2016 | 94.2 | 
162 | 2016-0161 | Client 6 | Vendeur 6 | shipped | 09-08-2016 | 108 | 
178 | 2016-0177 | Client 7 | Vendeur 7 | shipped | 10-09-2016 | 31.2 | 
193 | 2016-0192 | Client 8 | Vendeur 8 | shipped | 18-10-2016 | 31.5 | 
194 | 2016-0192 | Client 9 | Vendeur 9 |shipped | 18-10-2016 | 55.4 | 
196 | 2016-0195 | Client 10 | Vendeur 10 | shipped | 02-11-2016 | 57.1 | 

- Здесь это запрос для подсчета количества экземпляров (я использовал тот же упрощенный запрос без соединений):

SELECT 
    COUNT(order_id) AS nb_order 
FROM 
    lh45p_hikashop_order 
WHERE 
    order_payment_id = '3' AND order_status = 'shipped' 

Когда я использую этот запрос в phpMyAdmin, я нахожу результат 17, когда он должен вернуться 10. Таблица lh45p_hikashop_order в phpMyAdmin содержит 24 строки. И когда я показываю результат в Joomla, я нахожу 21.

Я консультировался с другими вопросами, уже отправленными по адресу stackoverflow на эту тему.

Заранее спасибо


(EDIT) РЕШЕНИЕ:

мне удалось исправить свою ошибку, я все стыки, как указано RiggsFolly.

Вот запрос, который работает:

SELECT 
    COUNT(order_id) AS nb_order 
FROM 
    lh45p_hikashop_order 
INNER JOIN 
    lh81p_hikamarket_vendor ON lh45p_hikashop_order.order_vendor_id = lh45p_hikamarket_vendor.vendor_id 
INNER JOIN 
    lh45p_hikashop_user ON lh45p_hikashop_order.order_user_id = lh45p_hikashop_user.user_id 
INNER JOIN 
    lh45p_users ON lh45p_hikashop_user.user_cms_id = lh45p_users.id 
WHERE 
    order_status = 'shipped' AND order_payment_id = '3' 
ORDER BY 
    lh45p_hikashop_order.order_created ASC 

Еще раз спасибо

+0

Используйте exectly тот же запрос со всеми объединениями, просто измените 'SELECT COUNT (order_id) AS nb_order' Какое количество вы получите? ??? – RiggsFolly

+0

Возможно, внутренние соединения удалили некоторые записи из lh45p_hikashop_order из набора результатов. Вы сравниваете яблоки с грушами, если не просматриваете внутренние соединения. – Shadow

ответ

1

Внутреннее объединение возвращает только совпавшие строки.
Очевидно, что в ваших таблицах несколько строк не имеют совпадений в других таблицах.

0

Вы попробовали Select Count(*) As InstanceCount ....?

Не изменяйте другие детали?

+0

И проверьте, не возвращены ли какие-либо внутренние соединения –