Php 如果不匹配,Mysql计数将返回零

Php 如果不匹配,Mysql计数将返回零,php,mysql,count,Php,Mysql,Count,我在一个数组中有一组大约9000个导师ID,我将它们放在一个字符串中,如: (1,2, 3, 4,5,6,7,....9000,9001,9002) 以便我可以在以下查询中使用它们: select count(student_assignment.assignment_id) as total_assignment from student_assignment, assigned_tutor_fk where assignment_status = 'closed' and assig

我在一个数组中有一组大约9000个导师ID,我将它们放在一个字符串中,如:

(1,2, 3, 4,5,6,7,....9000,9001,9002)
以便我可以在以下查询中使用它们:

select count(student_assignment.assignment_id) as total_assignment from 
student_assignment, assigned_tutor_fk where  assignment_status = 'closed'
 and assigned_tutor_fk in (1,2, 3, 4,5,6,7,..100,101,103...9000,9001,9002)
 group by assigned tutor_fk.
我想计算与每个导师(分配的导师)以及那些没有作业的导师(即没有作业的导师)相关联的行总数 记录在表中,我希望将其分配计数显示为0,我只希望我的查询返回计数和分配的\u tutor\u fk 我的表格结构是:

    assignment_id | assigned_tutor_fk | assignment_date | student_id |
    |    1        |   2               |  22-01-2011     |  4         |
    |    2        |   3               |  14-03-2011     |  5         |
我试图让我的输出如下:

    |total_assignment | assigned_tutor_fk |
    |      5          | 4                 |
    |      2          | 7                 |
    |      0          | 8                 |
select 
   t.tutorId,
   count(sa.assignment_id) as total_assignment
from 
   tutor t
LEFT JOIN
   assigned_tutor_fk fk
ON
   fk.assigned_tutor_fk = tutor.tutorId 
LEFT JOIN
   student_assignment sa
ON
  fk.assignment_id = sa.id
where  
   sa.assignment_status = 'closed' OR
   ISNULL(sa.assignment_status) -- if join fails.
group by 
   t.tutorId

更新:我认为我无法正确表达自己,我已经有一个根据其他标准筛选的导师列表,将这两个查询结合起来非常复杂,因此现在我有一组导师id,我希望总和显示为零,以防导师没有作业记录。请帮我做这件事,因为我不知道现在该做什么。从表中选择它们,并与assignment和FK表进行左连接。在不知道所有桌子的情况下,我猜会是这样的:

    |total_assignment | assigned_tutor_fk |
    |      5          | 4                 |
    |      2          | 7                 |
    |      0          | 8                 |
SELECT 
  count(*) as total_assignment,
  assigned_tutor_fk  
FROM assignmentTable 
GROUP BY assigned_tutor_fk 
select 
   t.tutorId,
   count(sa.assignment_id) as total_assignment
from 
   tutor t
LEFT JOIN
   assigned_tutor_fk fk
ON
   fk.assigned_tutor_fk = tutor.tutorId 
LEFT JOIN
   student_assignment sa
ON
  fk.assignment_id = sa.id
where  
   sa.assignment_status = 'closed' OR
   ISNULL(sa.assignment_status) -- if join fails.
group by 
   t.tutorId

Left Join
从tutor表中检索所有值,如果存在匹配项,则将其与联接表合并。如果不是,则插入NULL

可能会这样做以获得他想要的结果集:选择count(*)作为总分配,assigned_tutor_fk从assignmentTable GROUP BY assigned_tutor_fki尝试过,但它只给出表中有记录的导师的结果,如果未找到匹配项,则不会返回零。@MahmoudGamal
IFNULL
将不起作用。。。在这种情况下,没有返回带有
NULL
count的行。。。相反,根本没有返回任何行…但我已经有一个根据其他标准筛选的导师列表现在我有一组导师id,而且我希望总和o显示为零,如果导师没有作业记录,谢谢这解决了我的问题,我承认一开始我并不认为它是合适的,但后来我意识到这是在这种情况下最好的解决办法。谢谢你创造了五一节!!干杯