php SQL语句按编号分组,但不存在的编号需要0计数

ma8fv8wu  于 2023-01-01  发布在  PHP
关注(0)|答案(1)|浏览(204)

我正试图对某些使用评分量表的棒球卡的记录进行统计。
现在,我有它通过一个循环的每张卡在一套使用计数功能来计数每张卡的总数与一定的成绩,这会导致100的查询,是非常缓慢的。
我试着使用GROUP BY语句,它可以满足我的需要,但不能说明该年级没有任何卡片的年级,在那里我需要它在我的表中正确地显示0。
我需要为每张相同的卡片计数的分级量表是:一、一点五、二、二点五、三、三点五、四、四点五、五、五点五、六、六点五、七、七点五、八、八点五、九、十
如果count为0,我需要它显示0
当前查询将按上述标准查看等级

SELECT count(id) FROM cards WHERE set='1986', brand='fleer', cardnum='57' and grade='1';
SELECT count(id) FROM cards WHERE set='1986', brand='fleer', cardnum='57' and grade='1.5';
SELECT count(id) FROM cards WHERE set='1986', brand='fleer', cardnum='57' and grade='2';
// and so on...

下面是groupby查询,它完成了我需要它完成的工作,但没有为该等级计数为0的卡片创建行。

SELECT count(id) as TOTAL, GRADE from cards where YEAR='1986' and BRAND='FLEER' and SPORT='BASKETBALL' and CARDNUM='57' GROUP BY GRADE order by `GRADE`+0;
8zzbczxx

8zzbczxx1#

您可以查询存在的内容。您可以对所需级别使用LEFT JOIN:

SELECT count(c.id) as TOTAL, q.GRADE
from (
  select '1' as GRADE
  union 
  select '1.5'
  union 
  select '2'
  union 
  select '2.5'
  union 
  select '3'
  union 
  select '3.5'
  union 
  select '4'
  union 
  select '4.5'
  union 
  select '5'
  union 
  select '5.5'
  union 
  select '6'
  union 
  select '6.5'
  union 
  select '7'
  union 
  select '7.5'
  union
  select '8'
  union 
  select '8.5'
  union
  select '9'
  union 
  select '10'
 ) q 
 left join cards c on q.GRADE=c.GRADE and c.YEAR='1986' and c.BRAND='FLEER' and c.SPORT='BASKETBALL' and c.CARDNUM='57' 
GROUP BY q.GRADE 
order by q.GRADE + 0;

相关问题