2013-08-28 44 views
0

我正在处理一些报告,并认为我需要使用临时表。我的代码执行api调用,以获取当天与该系统交互的所有用户cookie。mysql中的临时表问题

现在我有一张包含所有cookie和他们使用的浏览器类型的表格,我可以循环访问由api提供的cookie数组,然后为每个浏览器执行sql查找计数器,所以最终我可以报告不同浏览器完成的浏览器访问次数。

但是,正如你可以想象,如果有饼干(有)的分配可能需要很长的时间。

从我所知道的解决办法是让传给我的Cookie临时表和innerjoin到我的cookie数据表,然后做一个

select count(id),broswer ... group by browser 

下面是一个更加代码视图什么我想尝试做:

$json = file_get_content($apiURL); 
$cookies = ''; 
foreach($json as $val){$cookies .= ','.$val['cookie']; } 
$cookies = substr($cookies,1); 

mysql_query('CREATE TEMPORARY TABLE passedcookies (
    `cookie` varchar(200) NOT NULL, 
    PRIMARY KEY(cookie) 
) values ($cookies);') 

mysql_query('SELECT count(cd.id), cd.browser FROM cookiedata cd 
      INNER JOIN passedcookies pc 
      ON pc.cookie = cd.cookie 
      GROUP BY cd.browser;'); 

mysql_query('DESTROY TEMP TBL;'); 

我是否必须销毁临时表?什么时候销毁?如果3个用户运行该报告,每个用户都将获得他们自己的临时表?

感谢您的帮助

回答

2

如果您愿意,您可以销毁临时表。如果你不这样做,它会在你的MySQL连接关闭时自动销毁。除非您使用共享连接,否则当PHP脚本退出时会发生这种情况。

如果你不使用共享连接,那么每个用户将得到他们自己的临时表。

P.S.用于创建临时表的SQL语法是错误的,但您没有问过这个问题。 CREATE TEMPORARY TABLE中没有VALUES子句,属于您在其后使用的INSERT语句。

其实,对于你在做什么,我不认为你需要一个临时表。查询:

SELECT browser, count(*) 
FROM cookiedata 
WHERE cookie in ($cookies) 
GROUP BY browser 

应该可以正常工作。我认为MySQL很好地实现了IN (list)