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)的东西?什么是物品?在哪张桌子里?您需要传递以计算适当的列。