如何使用'%'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

找到“无行”!


蓝山帝景
浏览 200回答 3
3回答

慕村9548890

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

米脂

您可以使用concat来构建适当的条件$sWhere .= " file_name like concat('%', $search_item ,'%') OR name like concat('%', $search_item ,'%') ";(删除了字符串末尾的AND)无论如何,您应该查看数据库驱动程序以获取准备好的状态和绑定参数,因为在SQL中使用PHP可能会产生SqlInjection

牛魔王的故事

$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";
打开App,查看更多内容
随时随地看视频慕课网APP