Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Php 如何连接多个MySQL查询_Php_Mysql - Fatal编程技术网

Php 如何连接多个MySQL查询

Php 如何连接多个MySQL查询,php,mysql,Php,Mysql,我试图使用我们为每个用户保留的登录历史记录来计算应用程序的保留用户 我想知道哪些用户在第一个月注册,然后在第二个月回来,然后在第三个月回来,依此类推 单个查询很简单: 查询1 SELECT DISTINCT player_id FROM login_history WHERE timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1); 上面给出

我试图使用我们为每个用户保留的登录历史记录来计算应用程序的保留用户

我想知道哪些用户在第一个月注册,然后在第二个月回来,然后在第三个月回来,依此类推

单个查询很简单:

查询1

SELECT DISTINCT player_id 
FROM login_history 
WHERE timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1);
上面给出了我在
一月
的唯一登录,很简单

查询2

SELECT DISTINCT player_id 
FROM login_history 
WHERE timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1);
以上内容现在为我提供了2月份的唯一登录名

我怎样才能加入这两个或更多的,给我的球员id的共同的所有结果

我曾尝试在语句中使用,但速度非常慢

如有任何建议,将不胜感激


谢谢

使用
分组方式
拥有
而不是
不同的

SELECT player_id
FROM login_history
GROUP BY player_id
HAVING SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1)) > 0 and
       SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1)) > 0;
为了提高效率,您仍应包括
,其中

SELECT player_id
FROM login_history
WHERE timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1)
GROUP BY player_id
HAVING SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1)) > 0 and
       SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1)) > 0;

使用
分组依据
具有
而不是
不同

SELECT player_id
FROM login_history
GROUP BY player_id
HAVING SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1)) > 0 and
       SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1)) > 0;
为了提高效率,您仍应包括
,其中

SELECT player_id
FROM login_history
WHERE timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1)
GROUP BY player_id
HAVING SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1)) > 0 and
       SUM(timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1)) > 0;

也许这不是最好的答案,但是,你只需要提出另一个条件,它就完成了

SELECT DISTINCT
  player_id
FROM login_history
WHERE (timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00')
       AND (UNIX_TIMESTAMP('2014-02-01 00:00:00') - 1))
     OR (timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00')
         AND (UNIX_TIMESTAMP('2014-03-01 00:00:00') - 1));

也许这不是最好的答案,但是,你只需要提出另一个条件,它就完成了

SELECT DISTINCT
  player_id
FROM login_history
WHERE (timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00')
       AND (UNIX_TIMESTAMP('2014-02-01 00:00:00') - 1))
     OR (timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00')
         AND (UNIX_TIMESTAMP('2014-03-01 00:00:00') - 1));

另一种解决方案是再次使用同一个表和别名

SELECT DISTINCT lh1.player_id 
FROM login_history lh1 join login_history lh2 on lh1.player_id  = lh2.player_id 
WHERE lh1.timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1) 
AND lh2.timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1);
如果行数太多,可以使用子查询

SELECT DISTINCT lh1.player_id 
FROM 
(Select distinct player_id from login_history 
WHERE lh1.timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1) )lh1 
JOIN
(Select distinct player_id from login_history 
WHERE lh2.timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1) )lh2 on lh1.player_id  = lh2.player_id;
希望能有帮助。
注意。

另一种解决方案是再次使用同一个表和别名

SELECT DISTINCT lh1.player_id 
FROM login_history lh1 join login_history lh2 on lh1.player_id  = lh2.player_id 
WHERE lh1.timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1) 
AND lh2.timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1);
如果行数太多,可以使用子查询

SELECT DISTINCT lh1.player_id 
FROM 
(Select distinct player_id from login_history 
WHERE lh1.timestamp BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-02-01 00:00:00')-1) )lh1 
JOIN
(Select distinct player_id from login_history 
WHERE lh2.timestamp BETWEEN UNIX_TIMESTAMP('2014-02-01 00:00:00') 
AND (UNIX_TIMESTAMP('2014-03-01 00:00:00')-1) )lh2 on lh1.player_id  = lh2.player_id;
希望能有帮助。
注意。

这很有效,但我需要添加注册日期时间作为球员id的验证。所以,我只想检查玩家id的注册日期时间在两个日期之间。。。从注册日期时间为'2013-12-01 00:00:00'的播放器中选择播放器id@斯塔根。如果您想获取其他字段,那么这是另一个问题。我建议你问另一个问题。这很有效,除了我需要添加注册日期时间作为玩家id的验证。所以,我只想检查玩家id的注册日期时间在两个日期之间。。。从注册日期时间为'2013-12-01 00:00:00'的播放器中选择播放器id@斯塔根。如果您想获取其他字段,那么这是另一个问题。我建议你再问一个问题。