我有这个问题,我需要一个解决方案: 在我的数据库中,我有这种格式的代码:
xxxx xxx
当用户在此模式下搜索代码时,结果正常 但是当像xxxxxxx这样的用户搜索没有结果时。 我使用这个查询
SELECT *
FROM data
WHERE Data LIKE '%$search%'
有什么建议吗?
答案 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
在下面发表评论后:
搜索3和4:将4更改为3并再次运行查询。
答案 2 :(得分:-2)
这样做 -
SELECT *
FROM table
WHERE REPLACE(`name`,' ','') LIKE '%$name%'