我的表是这样的
Id | name
---------------
1 | clinker
2 | gypsum
现在我需要准备一个基于'name'字段的搜索。下面是select语句
select * from table where name like '%$keyword%'
现在,假设关键字是'clinker 1',我想要表的第一行作为结果集。我怎么才能做到呢? 不太确定MySQL,但LIKE
应该与任何字符表达式在一边或两边工作。它包括列和字面量。因此,可以反过来使用LIKE
来查找反向匹配:
SELECT *
FROM table
WHERE name LIKE '%$keyword%'
OR '$keyword' LIKE CONCAT('%', name, '%')
您需要拆分$keyword
并扩展您的查询以匹配$keyword
列表中的任何单词:
$keywordList = explode(' ', $keyword);
$sql = 'select * from table where ';
while (!empty($keywordList)) {
$likeKeyword = array_shift($keywordList);
$sql .= "keyword like '%{$likeKeyword}%'";
if (!empty($keywordList))
$sql .= " or ";
}
//...run your query here
因此,如果$关键字是clinker 1
,那么结果查询将是:
select * from table where keyword like '%clinker%' or keyword like '%1%'