Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将2条sql语句与where子句合并_Mysql_Sql_Left Join - Fatal编程技术网

Mysql 将2条sql语句与where子句合并

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

我有两个表,第一个是用户(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 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;