Reputation: 353
I'm having a bit of difficulty retrieving fast responds from the mysql server whilst performing such query:
select distinct(products.id) as product_id,products.title as product_name, (select count(id) from stock where stock.available='0' and stock.product_id=products.id) as none,
(select count(id) from stock where stock.available='1' and stock.product_id=products.id) as available,
(select count(id) from stock where stock.available='2' and stock.product_id=products.id) as staged,
(select count(id) from stock where stock.available='3' and stock.product_id=products.id) as departed,
(select count(id) from stock where stock.available='4' and stock.product_id=products.id) as delivered
from products,stock where products.id=stock.product_id;
I wonder if there's any other query method that will deliver much faster respond. Thanx :-)
Upvotes: 1
Views: 50
Reputation: 33381
Something like this:
SELECT
P.id as product_id,
P.title as product_name,
SUM(CASE WHEN S.available = 0 THEN 1 ELSE 0 END) as none,
SUM(CASE WHEN S.available = 1 THEN 1 ELSE 0 END) as available,
SUM(CASE WHEN S.available = 2 THEN 1 ELSE 0 END) as staged,
SUM(CASE WHEN S.available = 3 THEN 1 ELSE 0 END) as departed,
SUM(CASE WHEN S.available = 4 THEN 1 ELSE 0 END) as delivered
FROM products P
JOIN stock S
ON P.id = S.product_id
GROUP BY P.id,
P.title
Upvotes: 3