如何在MySQL Query中添加两个WHERE语句?

时间:2017-06-01 20:25:03

标签: php mysql

我有MySQL的查询,

return $this->resultQuery("SELECT COUNT(home_id) AS total 
    FROM `".$this->table_prefix."user_homes` 
    WHERE user_id = $assign_id ". 
    ($home_cfg_id ? 'AND `home_cfg_id` IN (
        SELECT `home_cfg_id` 
        FROM `'.$this->table_prefix.'server_homes` 
        WHERE home_cfg_id = '.$home_cfg_id' )': ''));

但运行此查询时仍然出错

2 个答案:

答案 0 :(得分:1)

根据要求,我正在回答这个问题。在.之后,您在查询字符串末尾缺少连结$home_cfg_id

当调试这样的东西时,按照@xQbert的建议做这些通常很有帮助,并输出sql字符串。这将允许您查看查找任何看起来错误的内容 - 以及(可能)如果字符串创建不正确,则会给出更清晰的PHP错误。

return $this->resultQuery("SELECT COUNT(home_id) AS total 
    FROM `".$this->table_prefix."user_homes` 
    WHERE user_id = $assign_id ". 
    ($home_cfg_id ? 'AND `home_cfg_id` IN (
        SELECT `home_cfg_id` 
        FROM `'.$this->table_prefix.'server_homes` 
        WHERE home_cfg_id = '.$home_cfg_id.' )': ''));
                                          ^

答案 1 :(得分:1)

通过盯着构建SQL的代码来调试SQL很困难。它也很难使用字符串连接语法而不会出错。

以下是一些使这种调试变得更容易的技巧:

提示1:在字符串中引用变量而不是使用.连接。

$string = 'part 1' . $variable . 'part 2';

也可以写成:

$string = "part1{$variable}part2";

花括号是可选的,除非您的变量名称会遇到以下文字文本,或者您使用复杂的PHP对象和数组:

$string = "part1{$var['key']}part2{$obj->field}part3";

但是我喜欢在将变量放入字符串时一致地使用花括号,因为它可以很容易地看到PHP变量的位置。

提示2:使用临时变量:

$user_homes = "{$this->table_prefix}user_homes";
$server_homes = "{$this->table_prefix}server_homes";

提示3:在使用之前构建SQL查询。避免使用三元运算符?:,而是使用if()。无论如何,在某些情况下你还是需要它,所以你也可以保持一致。

$sql = "SELECT COUNT(home_id) AS total 
  FROM `{$user_homes}` 
  WHERE user_id = {$assign_id}";
if ($home_cfg_id) {
    $sql .= " AND `home_cfg_id` IN (
      SELECT `home_cfg_id` 
      FROM `{$server_homes}` 
      WHERE home_cfg_id = {$home_cfg_id}";
}

// Here you can log the SQL query if you need to debug

return $this->resultQuery($sql);

这使您的代码更易于阅读,更易于调试,更易于修改。