Mik*_*ike 27 mysql select sql-like
我正在使用此查询来选择数据:
mysql_query("SELECT * FROM products WHERE product_name LIKE '%".$search."%'");
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,它有时会选择比我想要的更多.
例如,我想选择产品"BLA",但我的查询也选择产品"BLABLA".要清楚,如果我想选择"产品1",我不希望查询选择"产品11".
有人知道如何管理吗?
谢谢.
Jam*_*s C 39
你只想搜索单词边界吗?如果是这样,原始版本可能是:
SELECT * FROM products WHERE product_name LIKE "% foo %";
Run Code Online (Sandbox Code Playgroud)
或者你可能会更聪明一点,并通过以下方式寻找单词边界 REGEXP
SELECT * FROM products WHERE product_name RLIKE "[[:<:]]foo[[:>:]]";
Run Code Online (Sandbox Code Playgroud)
小智 10
在Google上发现了这个问题,所以我认为有些人可能会偶然发现这一点,所以这是我非常不优雅的尝试:
SELECT * FROM products
WHERE product_name LIKE 'BLA %' #First word proceeded by more words
OR WHERE product_name LIKE '% BLA' #Last word preceded by other words
OR WHERE product_name LIKE '% BLA %' #Word in between other words
OR WHERE product_name = 'BLA'; #Just the word itself
Run Code Online (Sandbox Code Playgroud)
不确定效率或者是否涵盖所有情况,所以如果效率非常低或太不优雅,请随意投票.
SELECT *
FROM products
WHERE product_name = 'BLA'
Run Code Online (Sandbox Code Playgroud)
会精确选择 BLA
SELECT *
FROM products
WHERE product_name LIKE 'BLA%'
Run Code Online (Sandbox Code Playgroud)
将选择BLADDER和BLACKBERRY,但不REBLAND
要选择BLA作为字符串的第一个单词,请使用:
SELECT *
FROM products
WHERE product_name RLIKE '^Bla[[:>::]]'
AND product_name LIKE 'Bla%'
Run Code Online (Sandbox Code Playgroud)
如果您有索引,第二个条件可能会提高您的查询性能product_name.
尝试使用正则表达式:
SELECT
*
FROM
`products`
WHERE
product_name regexp '(^|[[:space:]])BLA([[:space:]]|$)';
Run Code Online (Sandbox Code Playgroud)
删除LIKE关键字并用于=精确匹配
编辑
不要忘记使用mysql_real_escape_string转义用户输入,否则如果有人在输入框中输入引号,您的查询将失败。
$search=mysql_real_escape_string($search);
mysql_query("SELECT * FROM products WHERE product_name='".$search."'");
Run Code Online (Sandbox Code Playgroud)