Mysql 将2条sql语句与where子句合并
我有两个表,第一个是用户(13068),另一个是邀请(211343) 用户的fbuid与邀请者的fbuid相同 因此,我尝试将这两个表导出为excel,它应该如下所示 u、 姓名、u.Address、u.fbuid….、计数(i.id) 所以我已经试过了Mysql 将2条sql语句与where子句合并,mysql,sql,left-join,Mysql,Sql,Left Join,我有两个表,第一个是用户(13068),另一个是邀请(211343) 用户的fbuid与邀请者的fbuid相同 因此,我尝试将这两个表导出为excel,它应该如下所示 u、 姓名、u.Address、u.fbuid….、计数(i.id) 所以我已经试过了 SELECT u.*,(SELECT COUNT(i.id) FROM invitations i WHERE i.isaccepted = 1 and i.inviter = u.fbuid) as chance FROM users WHE
SELECT u.*,(SELECT COUNT(i.id) FROM invitations i WHERE i.isaccepted = 1 and i.inviter = u.fbuid) as chance FROM users WHERE u.datecreated BETWEEN '2013-01-01' AND '2014-01-01' LIMIT 0,50
及
问题是left join只向用户发出邀请,但只有大约2000个用户被邀请,我需要列出所有用户
第一个是限制50秒36秒。我无法想象有多少人拿走了所有的唱片。除了加入,我还能做什么?或者正确的方法应该是什么。这是使用
左连接的查询:
SELECT *, COUNT(i.id) as chance
FROM users u LEFT JOIN
invitations i
ON u.fbuid = i.inviter
WHERE u.datecreated BETWEEN '$startdate' AND '$enddate' and i.isaccepted=1
GROUP BY fbuid;
问题是您正在where
子句中的i
表上进行筛选。由于左联接
,其值可能为NULL
。将该条件移动到on
子句:
SELECT u.*, COUNT(i.id) as chance
FROM users u LEFT JOIN
invitations i
ON u.fbuid = i.inviter and i.isaccepted = 1
WHERE u.datecreated BETWEEN '$startdate' AND '$enddate'
GROUP BY fbuid;
我真的不知道它是否有效,因为查询仍然没有返回任何结果,并且我已经添加了限制50。我真的很绝望。a和5条记录花了153秒,为什么我不能得到它?第一个查询是在输出的每一行上运行一个单独的子查询。如果在邀请(inviter,isaccepted,id)
上有一个索引,它会运行得更快。我这么做了,你说得对,我选择了fbuid列作为索引,然后瞧!谢谢你们两位,@Gordon Linoff,你们真是个救命恩人。
SELECT u.*, COUNT(i.id) as chance
FROM users u LEFT JOIN
invitations i
ON u.fbuid = i.inviter and i.isaccepted = 1
WHERE u.datecreated BETWEEN '$startdate' AND '$enddate'
GROUP BY fbuid;