我们有以下列的图像表: - 1)imageId,2)productId,3)isApproved [flag 1/0]。一种产品可以有多个图像。
我们的存储过程必须返回特定productId的所有已批准图像+该productId的所有图像(已批准/未批准)的计数。
select * from images where isApproved=1
where productId = {user_entered_id};
select count(*) from images
where productId = {user_entered_id};
有没有更好的方法在1个查询中从图像表中获取这2个信息?它是一个巨大的表,我们希望尽可能地减少SQL查询。
一个解决方法是 - 修改query1并将所有图像返回到应用程序服务器并过滤isApproved = 1图像但是它返回isApproved = 0图像到应用程序服务器,这是不必要且有风险的。有更好的方法吗?
答案 0 :(得分:1)
您可以汇总值:
select group_concat(case when isApproved = 1 then image_id end) as approved_image_ids,
count(*) as num_images
from images i
where productId = {user_entered_id};
答案 1 :(得分:0)
有一种方法可以做到这一点。但计数将重复多次(取决于产品ID为“用户输入”的实例数)。
SELECT imageId, count from
Images NATURAL JOIN
(SELECT productId, count(*) as count from images where isApproved=1
GROUP BY productId
HAVING productId = <user_input>)
WHERE productId = <user_input>;
但是可以跳过GROUP BY子句。 希望这会有所帮助。