MySql变量与php

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

我在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, 
          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.
  }