【发布时间】:2009-10-16 22:12:58
【问题描述】:
我在 php.ini 中遇到了一个错误。格式化这个字符串以传递给 php 中的 mysql_query() 的正确方法是什么?
SELECT count(*) FROM agents INTO @AgentCount;
SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount,
COUNT( * ) / ( @AgentCount) AS percentage
FROM agents
GROUP BY user_agent_parsed
ORDER BY thecount DESC LIMIT 50;
在 php 中,这是我设置 $query 的方式
$query = "
SELECT count(*) FROM agents INTO @AgentCount;
SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount,
COUNT( * ) / ( @AgentCount) AS percentage
FROM agents
GROUP BY user_agent_parsed
ORDER BY thecount DESC LIMIT 50";
如果我通过命令行会话将其直接放入 MySql 中,该确切查询将正常工作。我是否需要对 mysql_query() 发出两个单独的 php 调用并存储第一个结果?
我收到以下错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'SELECT user_agent_parsed, user_agent_original, COUNT(user_agent_parsed ) AS thecount' 附近使用正确的语法
不使用子选择而是选择 MySql 变量的原因是为了避免在每个百分比计算中发生 count()。尽管引擎可能正在为此进行优化。到目前为止,我还无法证实这一点。我还听说子选择几乎总是非最佳的。
解释告诉我这个:
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY 代理索引 NULL user_agent_parsed 28 NULL 82900 使用临时;使用文件排序 2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL 选择优化掉的表【问题讨论】: