在mysql中搜索查询

时间:2017-07-28 10:17:43

标签: mysql

我有这个问题,我需要一个解决方案: 在我的数据库中,我有这种格式的代码:

xxxx xxx 

当用户在此模式下搜索代码时,结果正常 但是当像xxxxxxx这样的用户搜索没有结果时。 我使用这个查询

SELECT *
FROM data
WHERE Data LIKE '%$search%'

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

根据我的研究,我了解到您的搜索代码是固定大小的。以下SQL查询可能有效。因为我用样本数据测试了它。

SELECT * FROM data WHERE Data LIKE 
CONCAT("%",TRIM(SUBSTRING('xxxx xxx',1,4))," ",TRIM(SUBSTRING('xxxx xxx' FROM 5)),"%")

SELECT * FROM data WHERE Data LIKE 
CONCAT("%",TRIM(SUBSTRING('xxxxxxx',1,4))," ",TRIM(SUBSTRING('xxxxxxx' FROM 5)),"%")

这是我测试的实际查询。

然后您的查询如下, 任

SELECT * FROM data WHERE Data LIKE 
CONCAT("%",TRIM(SUBSTRING('$search',1,4))," ",TRIM(SUBSTRING('$search' FROM 5)),"%")

SELECT * FROM data WHERE Data LIKE 
CONCAT("%",TRIM(SUBSTRING($search,1,4))," ",TRIM(SUBSTRING($search FROM 5)),"%")

测试一下,你可能会得到结果。

答案 1 :(得分:0)

正如您所说,数据是通过PHP表单输入的,那么我们可以使用PHP添加空间比使用MYSQL更容易。

wordwrap(trim($userInputedString) , 4 , ' ' , true );

这将删除用户输入的字符串中的所有空格,使所有XXXX XXX字符串XXXXXXX - 然后在第4个X之后添加一个空格,再次生成格式XXXX XXX。看起来修剪不合逻辑然后做,但它确保所有输入都被处理相同而不必添加太多条件。

参考文献:

http://php.net/manual/en/function.wordwrap.php

http://php.net/manual/en/function.trim.php

更新1

在下面发表评论后:

搜索3和4:将4更改为3并再次运行查询。

答案 2 :(得分:-2)

这样做 -

SELECT * FROM table WHERE REPLACE(`name`,' ','') LIKE '%$name%'