首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中的临时表问题

问mysql中的临时表问题
EN

Stack Overflow用户
提问于 2013-08-28 19:38:37
回答 1查看 102关注 0票数 0

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

现在,我有了一个包含所有cookie和它们使用的浏览器类型的表,我可以循环遍历api提供的cookie数组,并对每个diff浏览器进行sql查找,以便最终报告不同浏览器进行的浏览器访问次数。

但是,正如您可以想象的那样,如果有很多cookie(确实有),这可能会花费很长时间。

据我所知,解决方案是将传递给我的cookie创建一个临时表,并将其内部连接到我的cookie数据表中,然后执行

代码语言:javascript
复制
select count(id),broswer ... group by browser

下面是我想要尝试的更多的代码视图:

代码语言:javascript
复制
$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个用户运行该报告,那么每个用户都会得到自己的临时表吗?

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-28 19:50:01

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

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

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

实际上,我不认为你需要临时的桌子。查询:

代码语言:javascript
复制
SELECT browser, count(*)
FROM cookiedata
WHERE cookie in ($cookies)
GROUP BY browser

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18496815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档