Php 使用Count、Group、join order按返回值但不准确

Php 使用Count、Group、join order按返回值但不准确,php,mysql,count,group-by,having,Php,Mysql,Count,Group By,Having,我运行了以下查询: 当我部署代码时,我意识到它没有给我所需的结果。我希望实现的目标:获取在studentusers和useractivation中显示电子邮件的用户,条件是该电子邮件显示在useractivation中,且带有refcomfirm='2',并且该电子邮件显示在studentusers中。refemail您希望只包括表中未出现3次或更多次的电子邮件,即使这些事件没有refconfirm=2。但在您当前的查询中,您只计算那些符合该条件的 因此,将查询更改为将该条件移动到having子

我运行了以下查询:


当我部署代码时,我意识到它没有给我所需的结果。我希望实现的目标:获取在studentusers和useractivation中显示电子邮件的用户,条件是该电子邮件显示在useractivation中,且带有refcomfirm='2',并且该电子邮件显示在studentusers中。refemail您希望只包括表中未出现3次或更多次的电子邮件,即使这些事件没有
refconfirm=2
。但在您当前的查询中,您只计算那些符合该条件的

因此,将查询更改为将该条件移动到
having
子句,在该子句中,您将只需要至少一个已计数的记录具有该特定条件:

选择studentusers.refemail,计数(studentusers.refemail)
来自学生用户
studentusers.email=useractivation.email上的LEFT JOIN useractivation
按studentusers.ref分组电子邮件
计数(studentusers.refemail)<3
和计数(useractivation.refcomfirm='2'然后1结束时的情况)>0
限0,500
查看它在运行时选择a.REF电子邮件,计数(*) 来自学生用户a 在a.refemail=b.email上加入用户激活b 其中b.refcomfirm='2' 和refemail!='adminpro@studentmillionaire.com.ng' 和refemail!='adminprime@studentmillionaire.com.ng' 和refemail!='admingold@studentmillionaire.com.ng' 和refemail!='adminpremium@studentmillionaire.com.ng' 按a.ref电子邮件分组
HAVING COUNT(*)“此类电子邮件在refemail中出现的次数少于三次”:这一点不清楚。如果你能为这两个表提供一些(有限的)样本数据,以及你期望的输出(但你没有得到这个查询),那就好了。我只是编辑了问题,请考虑把这些信息作为文本发布,而不是像图片那样,因为这使得重现你所拥有的情况变得更加困难。Bro,你一直在问格式。真的很抱歉,但这很清楚。有没有办法不用担心…我已经修好了。非常感谢你的支持。还是谢谢你。我能够解决这个问题,不客气,但是在StackOverlfow上说“谢谢”的方式是投票给你喜欢的答案,然后接受其中一个可用的答案。如果正确答案不在其中,但您有一个,请将其作为答案发布(您可以回答自己的问题)。Trincot…**微笑***我已经做了。根据合同,我希望两天后能拿到rule@Legendchyke,你没有投票,也没有接受任何答复。谢谢保持联系。我真的很想把这归功于你,但即使是我的回答也不起作用。这并不是一个真正的动态解决方案。您似乎首先看到哪些是有问题的案例,然后逐字逐句地排除它们。这不是一个好的解决办法。一旦你面对一个不断变化的数据集,在某个时候你会再次遇到需要特殊处理的情况。@trincot你是对的!当我部署代码时,我意识到它没有给我所需的结果。我希望实现的目标是:获取在studentusers和useractivation中显示电子邮件的用户,条件是该电子邮件显示在useractivation中,且带有refcomfirm='2',并且该电子邮件显示在studentusers.refemail中
    SELECT studentusers.refemail, COUNT( studentusers.refemail ) 
FROM studentusers
LEFT JOIN useractivation ON studentusers.email = useractivation.email
WHERE useractivation.refcomfirm =  '2'
GROUP BY studentusers.refemail
HAVING COUNT( studentusers.refemail ) <3
LIMIT 0 , 500
SELECT a.refemail, COUNT( * ) 
FROM studentusers a
JOIN useractivation b ON a.refemail = b.email
WHERE b.refcomfirm =  '2'
AND refemail !=  'adminpro@studentmillionaire.com.ng'
AND refemail !=  'adminprime@studentmillionaire.com.ng'
AND refemail !=  'admingold@studentmillionaire.com.ng'
AND refemail !=  'adminpremium@studentmillionaire.com.ng'
GROUP BY a.refemail
HAVING COUNT( * ) <3
ORDER BY a.id ASC 
LIMIT 0 , 500