mysql中的临时表问题

时间:2013-08-28 19:38:37

标签: php mysql

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

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

然而,如果有分配的cookie(有),你可以想象这可能需要很长时间。

据我所知,解决方案是将cookie的临时表传递给我并将其连接到我的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个用户运行报告,每个用户都会获得自己的临时表吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

如果您没有使用共享连接,那么每个用户都将获得自己的临时表。

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

实际上,对于你正在做的事情,我认为你不需要临时表。查询:

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

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