Php 如何从子查询中获取唯一计数?

Php 如何从子查询中获取唯一计数?,php,mysql,Php,Mysql,以下是查询: SELECT count(a.id) as itemCount, concat(a.firstname, ' ', a.lastname) as name, oi.status, a.id as adminID, (SELECT count(a.id) as oldItemsCount FROM bl_orderitems oi,

以下是查询:

    SELECT count(a.id) as itemCount, 
           concat(a.firstname, ' ', a.lastname) as name, 
           oi.status, a.id as adminID, 
           (SELECT count(a.id) as oldItemsCount 
                   FROM bl_orderitems oi, 
                        bl_researcher r,             
                        tbladmins a 
                   WHERE oi.status='Pending' AND 
                         r.id=oi.researcherid AND 
                         r.researchermanagerid=a.id AND
                         DATE(oi.regdate)=DATE_SUB(CURDATE(), INTERVAL 3 DAY))
                   as oldItemCount
    FROM bl_orderitems oi, 
           bl_researcher r,
           tbladmins a 
    WHERE oi.status in ('Pending', 'QA') AND
           r.id=oi.researcherid AND 
           r.researchermanagerid=a.id 
    GROUP BY 
          name, adminID, oi.status;
此查询应返回如下内容:

 itemCount    name            status    adminID  oldItemCount 
    5         John McKay      Pending      20        125
    15        Clown Ho        QA           12        125
    39        Jack Fell       Pending      13        125
    5         Mark Grunigen   Pending       2        125
    1         Kim Jun Li      QA            2        125
    206       Abama Oladen    Pending       4        125
当我试图实现这一点时,它会返回唯一的oldItemCount

oldItemCount应该是套件“
DATE(oi.regdate)=DATE\u SUB(CURDATE(),INTERVAL 3 DAY))的计数(a.id)


如果我尝试使用DISTINCT on子查询,它会说
操作数应该包含1列

您要查找的是

编辑:根据您的评论,您应该尝试以下操作:

SELECT count(DISTINCT oi.id) as itemCount, 
       concat(a.firstname, ' ', a.lastname) as name, 
       oi.status, a.id as adminID, 
       (SELECT count(oi2.id) as oldItemsCount 
               FROM bl_orderitems oi2, 
                    bl_researcher r2
               WHERE oi2.status='Pending' AND 
                     r2.id=oi.researcherid AND 
                     r2.researchermanagerid=a.id AND
                     DATE(oi2.regdate)=DATE_SUB(CURDATE(), INTERVAL 3 DAY))
               as oldItemCount
FROM bl_orderitems oi, 
       bl_researcher r,
       tbladmins a 
WHERE oi.status in ('Pending', 'QA') AND
       r.id=oi.researcherid AND 
       r.researchermanagerid=a.id 
GROUP BY 
      name, adminID, oi.status;

它更简单,可能适合您的需要。

尝试
count(distinct…
)。检查:@Barranka不起作用,为所有行返回相同的oldItemCount:Sdid您在子查询中使用它吗?@Barranka是,正如在“SELECT count(DISTINCT oi.id)”中一样,为所有行返回4,这是不正确的:SWell,我猜您的子查询缺少一些与主查询连接的条件。您可能应该在主查询和子查询中选择不同的表别名,至少更明确一些。我认为您想要实现的不是COUNT(DISTINCT a.id),而是类似COUNT(DISTINCT oi.id)的东西?什么是物品?在哪张桌子里?您需要传递以计算适当的列。