Я пытаюсь запустить 2 разных события COUNT в одном запросе SQL, но я получаю эту ошибку:
Столбец не найден: 1054 Неизвестный столбец "po.product_id" в разделе "on"
Вот sql:
SELECT COUNT(*) vouchersleft, 'prod_name',
'start_date',
'end_date',
'reg_price',
'sale_price',
bbp.'prod_id',
'vouch_limits',
'sp_name',
'order_id',
'img_name',
'outlets'
FROM 'vouchers' as 'v'
INNER JOIN 'bb_products' as 'bbp' ON bbp.'prod_id' = v.'product_id'
INNER JOIN 'service_providers' as 'sp' ON sp.'service_provider_id' = bbp.'provider_id'
INNER JOIN 'prod_pics' as 'pp' ON pp.'prod_id' = bbp.'prod_id'
INNER JOIN (SELECT COUNT(DISTINCT 'outlet_id') AS 'outlets' FROM 'prod_outlets' GROUP BY 'product_id') as 'po' ON po.'product_id' = bbp.'prod_id'
WHERE 'frontend' = :frontend
AND bbp.'featured' = :featured
AND 'order_id' = :order_id
AND pp.'featured' = :featured_img
GROUP BY bbp.'prod_id'
Если вы хотите присоединиться к столбцу, он должен быть возвращен SELECT
. Включите product_id
в список столбцов, который вы выбираете.
Изменить:
INNER JOIN (SELECT COUNT(DISTINCT 'outlet_id') AS 'outlets' FROM 'prod_outlets' GROUP BY 'product_id') as 'po' ON po.'product_id' = bbp.'prod_id'
Для того, чтобы:
INNER JOIN (SELECT 'product_id', COUNT(DISTINCT 'outlet_id') AS 'outlets' FROM 'prod_outlets' GROUP BY 'product_id') as 'po' ON po.'product_id' = bbp.'prod_id'
Без выбранного столбца product_id
не отображается за пределами этой промежуточной таблицы (здесь называется po
). Вот почему вы получаете неизвестный столбец с ошибкой, потому что только известный столбец является outlets
.
Включение столбца в GROUP BY
недостаточно. Вы также должны включить его в SELECT
:
SELECT product_id, COUNT(DISTINCT 'outlet_id') AS 'outlets'
FROM 'prod_outlets'
GROUP BY 'product_id'
Почему бы просто не присоединиться напрямую
SELECT COUNT(*) vouchersleft, 'prod_name',
'start_date',
'end_date',
'reg_price',
'sale_price',
bbp.'prod_id',
'vouch_limits',
'sp_name',
'order_id',
'img_name',
COUNT(DISTINCT po.'outlet_id') AS 'outlets'
FROM 'vouchers' as 'v'
INNER JOIN 'bb_products' as 'bbp' ON bbp.'prod_id' = v.'product_id'
INNER JOIN 'service_providers' as 'sp' ON sp.'service_provider_id' = bbp.'provider_id'
INNER JOIN 'prod_pics' as 'pp' ON pp.'prod_id' = bbp.'prod_id'
RIGHT JOIN 'prod_outlets' as 'po' ON po.'product_id' = bbp.'prod_id'
WHERE 'frontend' = :frontend
AND bbp.'featured' = :featured
AND 'order_id' = :order_id
AND pp.'featured' = :featured_img
GROUP BY bbp.'prod_id'