MySql变量与php
我在php中遇到了一个错误。在php中,格式化此字符串以传递给mysql_query()的正确方法是什么 在php中,我是如何设置$query的MySql变量与php,php,mysql,subquery,Php,Mysql,Subquery,我在php中遇到了一个错误。在php中,格式化此字符串以传递给mysql_query()的正确方法是什么 在php中,我是如何设置$query的 $query = " SELECT count(*) FROM agents INTO @AgentCount; SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount, COU
$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行“选择用户\代理\解析,用户\代理\原始,计数(用户\代理\解析)为计数”附近使用的正确语法
不使用子选择而选择MySql变量的原因是为了避免在每次百分比计算时都出现count()。尽管可能发动机正在为此进行优化。到目前为止,我还不能证实这一点。我还听说子选择几乎总是非最优的
解释告诉我:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY agents index NULL user_agent_parsed 28 NULL 82900 Using temporary; Using filesort
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
id选择\u类型表类型可能的\u键\u长度参考行额外
1主代理索引空用户\u代理\u使用临时;使用文件排序
2子查询空选择表优化掉如果您使用的是
mysql\u查询
,那么是的,您需要分别发送每个查询。根据mysql\u query顶部的描述:“mysql\u query()向当前活动的数据库发送一个唯一的查询(不支持多个查询)。”
至于子查询,您会感到惊讶;查询优化器通常能很好地处理它们。在PHP中一次只能有一个查询
$query1 = "SELECT count(*) FROM agents INTO @AgentCount"
$query2="
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";
更新
我有一个包含所有查询的DAL。我的DAL中的一个典型函数如下所示:
// These functions are reusable
public function getAllRows($table)
{
$sql =" SELECT * FROM $table";
$this->query($sql);
return $this->query_result;
}
在我的BLL(业务层)中,我有以下内容:
public function getUserAgents()
{
$result = parent::getAllRows();
$row = mysql_fetch_array($result);
return $row[0]; // Retrieves the first row
// Then you take this value and to a second request. Then return the answer / rows.
}
public function getUserAgents()
{
$result = parent::getAllRows();
$row = mysql_fetch_array($result);
return $row[0]; // Retrieves the first row
// Then you take this value and to a second request. Then return the answer / rows.
}