我需要在 sql 语句的 LIKE 模式中搜索字段值
I need to search field value in LIKE pattern of sql statement
我的table看起来像这样
Id | name
---------------
1 | clinker
2 | gypsum
现在我需要准备一个基于 'name' 字段的搜索。
这是 select 声明
select * from table where name like '%$keyword%'
现在,假设关键字是“clinker 1”,我想要 table 的第一行作为结果集。
我怎样才能做到这一点?
您需要拆分 $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
因此,如果 $keyword 是 clinker 1
,结果查询将是:
select * from table where keyword like '%clinker%' or keyword like '%1%'
不太确定 MySQL,但 LIKE
应该可以在任一侧或两侧使用 any 字符表达式。这包括列和文字。因此,可以反过来使用 LIKE
来查找反向匹配:
SELECT *
FROM table
WHERE name LIKE '%$keyword%'
OR '$keyword' LIKE CONCAT('%', name, '%')
我的table看起来像这样
Id | name
---------------
1 | clinker
2 | gypsum
现在我需要准备一个基于 'name' 字段的搜索。 这是 select 声明
select * from table where name like '%$keyword%'
现在,假设关键字是“clinker 1”,我想要 table 的第一行作为结果集。 我怎样才能做到这一点?
您需要拆分 $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
因此,如果 $keyword 是 clinker 1
,结果查询将是:
select * from table where keyword like '%clinker%' or keyword like '%1%'
不太确定 MySQL,但 LIKE
应该可以在任一侧或两侧使用 any 字符表达式。这包括列和文字。因此,可以反过来使用 LIKE
来查找反向匹配:
SELECT *
FROM table
WHERE name LIKE '%$keyword%'
OR '$keyword' LIKE CONCAT('%', name, '%')