sql:获取略有修改的查询计数以及sql select查询?

时间:2018-03-18 20:47:00

标签: mysql sql

我们有以下列的图像表: - 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图像到应用程序服务器,这是不必要且有风险的。有更好的方法吗?

2 个答案:

答案 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子句。 希望这会有所帮助。