0

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

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

但是,您可以想象,如果有分配的 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 个用户运行报告,每个用户都会得到自己的临时表?

谢谢你的帮助

4

1 回答 1

2

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

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

PS你创建临时表的SQL语法是错误的,但你没有问这个。中没有VALUES子句CREATE TEMPORARY TABLE,它属于INSERT您在它之后使用的语句。

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

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

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

于 2013-08-28T19:50:01.983 回答