Mysql умножить счет - PullRequest
       22

Mysql умножить счет

0 голосов
/ 03 мая 2011

У меня есть запрос, который будет циклически перебирать таблицу заказов и, как подзапрос, также будет подсчитывать количество строк в другой таблице, используя внешний ключ.

SELECT eo.*, (
    SELECT COUNT(*)
    FROM ecom_order_items eoi
    WHERE eo.eo_id = eoi.eoi_parentid
    AND eoi.site_id = '1'
) AS num_prods
FROM ecom_orders eo
WHERE eo.site_id = '1' AND eo_username = 'testuser'

Теперь наТаблица ecom_order_items, имеет поле eoi_quantity.Я хочу, чтобы запрос отображал количество продуктов для каждого заказа с учетом поля количества.

SELECT eo.*, (
    SELECT COUNT(*) * eoi.eoi_quantity
    FROM ecom_order_items eoi
    WHERE eo.eo_id = eoi.eoi_parentid
    AND eoi.site_id = '1'
) AS num_prods
FROM ecom_orders eo
WHERE eo.site_id = '1' AND eo_username = 'testuser'

Однако, когда я пытаюсь это сделать, он просто дает мне тот же номер, что и раньше.Для заказа, который я тестирую, у него есть 2 элемента: один с количеством 1, другой с количеством 10, а num_prod возвращает 2 в обоих запросах.

Есть идеи?:)

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Если значение eoi.eoi_quantity состоит из нескольких значений, 1 и 10, только одно из них будет выбрано и умножено на COUNT (*). Итак, вы получаете результат 1 * 2.

Поскольку COUNT (*) = 2 для двух элементов, хотите ли вы результат 2 * 1 + 2 * 10? Это не кажется мне правильным. Я думаю, что вы хотите посчитать общее количество по всем соответствующим заказам, так почему бы не использовать SUM (eoi.eoi_quantity), чтобы получить 1 + 10 вместо этого? Таким образом вы бы имели:

SELECT eo.*, (
    SELECT SUM(eoi.eoi_quantity)
    FROM ecom_order_items eoi
    WHERE eo.eo_id = eoi.eoi_parentid AND eoi.site_id = '1'
) AS num_prods
FROM ecom_orders eo
WHERE eo.site_id = '1' AND eo_username = 'testuser';

Но это все равно даст вам одинаковое значение для каждого столбца. Фактически такой подзапрос (SELECT eo. *, ...) приведет к ошибке, если он вернет более одной строки.

Вот почему Йохан предложил вам присоединиться к столам. Вам необходимо объединить таблицы, чтобы убедиться, что строки правильно связаны, а затем сгруппировать их по идентификаторам, которые вы хотите для каждой строки. Как насчет:

SELECT eo.*, SUM(eoi.eoi_quantity)
FROM ecom_orders eo JOIN ecom_order_items eoi ON eo.eo_id = eoi.eoi_parentid
WHERE eo.site_id = '1' 
AND eo_username = 'testuser'
GROUP BY eo.eo_id;
1 голос
/ 03 мая 2011

Перепишите запрос на:

SELECT eo.*, sum(eoi.eoi_quantity) as sales
FROM ecom_orders eo
INNER JOIN ecom_order_items eoi ON (eo.eo_id = eoi.eoi_parentid)
WHERE eo.site_id = '1' AND eoi.site_id = '1' AND eo_username = 'testuser'
GROUP BY eo.eo_id;

Поскольку количество (*) для каждого отдельного элемента равно 1, count(*) * quantity совпадает с sum(quantity).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...