我有一个MySQL数据库,其中有一个列,其中包含一些我想搜索的文本。
让我们假设数据库中的一些文本语句是
现在让我们说,我想通过PHP脚本搜索MySQL数据库中包含"XXX2“或"YYY”的语句。
使用MySQL搜索只会返回语句1)。我想把这三句话都还回去。
我正在考虑的一件事是在PHP中生成搜索字符串的所有排列,然后依次查询MYSQL数据库。这是最好的方法吗?Php中是否有现成的函数来生成这样的组合?
发布于 2014-02-28 08:35:47
如果您知道在单词-部件之间需要哪些字符,则可以使用正则表达式查询数据库。对于你的例子来说,这是可行的:
查找XYZ2的变体:
SELECT \* FROM `xytest` WHERE val RLIKE 'XXX[- ]?2';查找YYYZZZ的变体:
SELECT
*
FROM `xytest`
WHERE val RLIKE 'YYY[- ]?ZZZ';这使用MySQL正则表达式匹配允许可选的-或word部件之间。
如果在中间有更多的字符,您可以将[- ]改为[- _] (也可以识别_)或[^a-z0-9] (每个非字母的非数字)。大括号后面的?使它的存在是可选的。
遗憾的是,MySQL无法告诉您匹配的是什么,但是如果您需要知道,可以将相同的正则表达式提供给PHP的正则表达式引擎之一。
查找XXX2或YYYZZZ:
SELECT
*
FROM `xytest`
WHERE val RLIKE 'XXX[- ]?2|YYY[- ]?ZZZ';当然也可以
SELECT
*
FROM `xytest`
WHERE val RLIKE 'XXX[- ]?2' OR val RLIKE 'YYY[- ]?ZZZ';发布于 2014-02-28 08:17:35
可能使用类似的操作符
SELECT
*
FROM
mytable
WHERE
mycol
LIKE
'%XXX%YYY%ZZZ%'发布于 2014-02-28 08:18:53
如果您想使用一个字符变体进行搜索,请尝试如下:
SELECT
*
FROM
mytable
WHERE
mycol
LIKE
'XXX_YYY_ZZZ'https://stackoverflow.com/questions/22089649
复制相似问题