首页 > 解决方案 > 如何使用 '%' where 和 'OR' 编写 SQL 'LIKE' 查询以进行搜索操作?

问题描述

我正在尝试将 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

发现“无行”!

引导我!谢谢!

标签: phpmysqlif-statement

解决方案


您需要将子句的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);

推荐阅读