我正在处理一些报告,并认为我需要使用临时表。我的代码执行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个用户运行报告,每个用户都会获得自己的临时表吗?
感谢您的帮助
答案 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)
。