我有一个MySQL数据库,其中包含一些我想要搜索的文本列。
让我们说数据库中的一些文本语句是
让我们说现在我想通过PHP脚本在MySQL数据库中搜索包含“XXX2”或“YYY ZZZ”的语句。
使用MySQL进行搜索只返回语句1)。我想要归还所有三个句子。
我想的一件事是在PHP中生成搜索字符串的所有排列并按顺序查询MYSQL数据库。这是最好的方法吗?在Php中有没有现成的函数来生成这样的组合?
答案 0 :(得分:0)
使用LIKE运算符可能
SELECT
*
FROM
mytable
WHERE
mycol
LIKE
'%XXX%YYY%ZZZ%'
答案 1 :(得分:0)
如果您想搜索1个字符的变体,请尝试以下操作:
SELECT
*
FROM
mytable
WHERE
mycol
LIKE
'XXX_YYY_ZZZ'
答案 2 :(得分:0)
SELECT *
FROM `table`
WHERE `column` LIKE 'XXX%'
OR `column` LIKE 'YYY%'
答案 3 :(得分:0)
如果您知道单词部分之间需要哪些字符,则可以使用正则表达式来查询数据库。对于您的示例,这将起作用:
查找XYZ2的变体:
选择
*
来自xytest
val RLIKE'XXX [ - ]?2';
查找YYYZZZ的变种:
SELECT
*
FROM `xytest`
WHERE val RLIKE 'YYY[- ]?ZZZ';
这使用MySQL's regular expression matching允许在字词部分之间选择-
或。
如果中间可以有更多字符,您可以将[- ]
更改为例如[- _]
(也识别_
)或[^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';