我试图将SQL LIKE用于两个不同的列。可以使用这种类型的操作吗?
我已经尝试过:
$sWhere .= " file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%' and ";
但是以上代码仅适用于单个情况。我想同时搜索两者。
这是我的代码:
if (isset($search_item) && $search_item != '') {
$sWhere .= " file_name like '%" . $search_item . "%' and ";
}
我想使用两个列名和一个搜索字段来执行搜索操作。
响应:
SELECT a.id, a.file_name, a.file_path,a.upload_type,a.upload_by, b.username,a.addedon
FROM tbl_asd as a
INNER JOIN user as b on b.id = a.upload_by
WHERE a.upload_type = 'asd' and a.addedon >= ( CURDATE() - INTERVAL 1000 DAY ) and (file_name like '%asd%' OR upload_by like '%asd%') ORDER BY id desc limit 0,10
发现“无行”!
引导我! 谢谢!
答案 0 :(得分:1)
您需要将OR
子句的WHERE
部分括在括号中,否则您将获得比预期更多的结果(基本上任何包含file_name like '%" . $search_item . "%'
的行)。改用它:
$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";
请注意,按原样查询可以使您易于进行SQL注入。理想情况下,您应该准备查询,而不要使用类似以下代码:
$query = "SELECT ... FROM ... WHERE";
$params = array();
$types = '';
if (isset($search_item) && $search_item != '') {
$query .= " file_name like ? OR name like ? AND ";
$types .= 'ss';
array_push($params, "'%$search_item%'", "'%$search_item%'");
}
// add other where clauses in a similar way
// ...
// make sure we have a trailing `WHERE` clause
$query .= '1 = 1';
$stmt = $link->prepare($link, $query) or die($link->error);
$stmt->bind_param($types, ...$params);
$stmt->execute() or die($stmt->error);
答案 1 :(得分:0)
$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";
答案 2 :(得分:0)
您可以使用concat来构建适当的条件
$sWhere .= " file_name like concat('%', $search_item ,'%') OR name like concat('%', $search_item ,'%') ";
(删除了字符串末尾的AND)
无论如何,您应该查看数据库驱动程序中准备好的状态和绑定参数,因为在SQL中使用PHP可能会产生SqlInjection