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秒回答:)