Если значение 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;