Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL Codeigniter-$this->;db->;查询和CLI结果不匹配_Php_Mysql_Codeigniter_Activerecord - Fatal编程技术网

Php MySQL Codeigniter-$this->;db->;查询和CLI结果不匹配

Php MySQL Codeigniter-$this->;db->;查询和CLI结果不匹配,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我使用此查询返回搜索结果 $id = $this->auth->get_user_id(); $query = $this->db->query(" SELECT user_id, facebook_id, first_name, last_name, country, state, city,

我使用此查询返回搜索结果

    $id = $this->auth->get_user_id();

    $query = $this->db->query("
    SELECT user_id,
           facebook_id,
           first_name,
           last_name,
           country,
           state,
           city,
           picture,
           cars_id,
           cars_name,
           cars_picture
    FROM   user_profiles
           JOIN users
             ON users.id = user_id
           JOIN cars
             ON cars.id_fk = user_id
    WHERE  user_id NOT LIKE '$id'
           AND activated = 1
           AND banned = 0
           AND first_name LIKE '%$search_term%'
            OR last_name LIKE '%$search_term%'
            OR Concat(first_name, ' ', last_name) LIKE
               '%$search_term%'            
    ORDER BY last_name ASC; 
    ");
如果我点击一个空的搜索框,它将返回所有用户,如果我输入名字或姓氏,它将只返回该特定用户作为搜索结果。使用命令行,手动输入(或留空)
$id
$first\u name
等时,此查询将给出类似的结果

但是,这里有一个奇怪的行为:以下几行似乎对查询没有影响:

user_id NOT LIKE '$id' //line 1
  AND activated = 1
  AND banned = 0
例如,我无法从搜索结果中排除当前用户(第1行)。 无论我为
激活的
禁止的
输入什么,单击空白搜索总是返回所有用户

更重要的是,如果我在命令行上运行此SQL并手动输入

user_id NOT LIKE '5'
   AND activated = 1
   AND banned = 0
它会正确过滤结果


有人知道我做错了什么吗?谢谢你的帮助

我认为ORs没有绑定到最后一个和第二个。试试这个:

AND (first_name LIKE '%$search_term%'
        OR last_name LIKE '%$search_term%'
        OR Concat(first_name, ' ', last_name) LIKE
           '%$search_term%' )     

我认为ORs对最后一个和最后一个没有约束力。试试这个:

AND (first_name LIKE '%$search_term%'
        OR last_name LIKE '%$search_term%'
        OR Concat(first_name, ' ', last_name) LIKE
           '%$search_term%' )     

这种行为的原因与混合
在一种条件下以及两者的优先顺序有关

当您出现以下情况时:

WHERE a
  AND b
  AND c
  AND d
  AND e
  AND f
或者

WHERE a
   OR b
   OR c
   OR d
   OR e
   OR f
不需要括号。无论如何添加括号,结果都不会更改

但当你有了这个:

WHERE a
  AND b
  AND c
   OR d
   OR e
   OR f
(因为
的优先级高于
),所以将其翻译为:

WHERE ( a
       AND b
       AND c
       AND d
      )
   OR e
   OR f
您可能想要一些不同的东西,例如:

WHERE a
  AND b
  AND c
  AND ( d
     OR e
     OR f
      )
因此,我认为您需要:

WHERE  user_id NOT LIKE '$id'
       AND activated = 1
       AND banned = 0
       AND ( first_name LIKE '%$search_term%'
          OR last_name LIKE '%$search_term%'
          OR Concat(first_name, ' ', last_name) LIKE
             '%$search_term%'    
           )

这种行为的原因与混合
在一种条件下以及两者的优先顺序有关

当您出现以下情况时:

WHERE a
  AND b
  AND c
  AND d
  AND e
  AND f
或者

WHERE a
   OR b
   OR c
   OR d
   OR e
   OR f
不需要括号。无论如何添加括号,结果都不会更改

但当你有了这个:

WHERE a
  AND b
  AND c
   OR d
   OR e
   OR f
(因为
的优先级高于
),所以将其翻译为:

WHERE ( a
       AND b
       AND c
       AND d
      )
   OR e
   OR f
您可能想要一些不同的东西,例如:

WHERE a
  AND b
  AND c
  AND ( d
     OR e
     OR f
      )
因此,我认为您需要:

WHERE  user_id NOT LIKE '$id'
       AND activated = 1
       AND banned = 0
       AND ( first_name LIKE '%$search_term%'
          OR last_name LIKE '%$search_term%'
          OR Concat(first_name, ' ', last_name) LIKE
             '%$search_term%'    
           )

@托尔:嗯,但实际上@Christopher比我早26秒回答:)@托尔:嗯,但实际上@Christopher比我早26秒回答:)