我正在使用这个查询返回搜索结果
$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_name
等时给出类似的结果。
但是,这是奇怪的行为:以下几行似乎对查询没有影响:
user_id NOT LIKE '$id' //line 1
AND activated = 1
AND banned = 0
例如,我无法从搜索结果中排除当前用户(第 1 行)。
无论我为 activated
或 banned
输入什么,点击空白搜索总是返回所有用户。
问题在于,如果我在命令行上运行此 SQL 并手动输入
user_id NOT LIKE '5'
AND activated = 1
AND banned = 0
它正确地过滤了结果。
有谁知道我做错了什么?感谢您的帮助!
最佳答案
我认为 OR 与最后一个 AND 没有关系。试试这个:
AND (first_name LIKE '%$search_term%'
OR last_name LIKE '%$search_term%'
OR Concat(first_name, ' ', last_name) LIKE
'%$search_term%' )
关于php - MySQL Codeigniter - $this->db->query 和 CLI 结果不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161877/