Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-搜索忽略空格的字段_Php_Mysql_Phpactiverecord - Fatal编程技术网

Php MySQL-搜索忽略空格的字段

Php MySQL-搜索忽略空格的字段,php,mysql,phpactiverecord,Php,Mysql,Phpactiverecord,忽略搜索词和字段中的空格,搜索字段的好方法是什么 例如: SELECT * FROM tablename WHERE NOSPACES(fieldname) LIKE '%{search term with spaces removed}%' 现实世界的例子: 我的客户有一个销售长块引擎的网站。然而,他们经常让人们在他们的网站上搜索“cat 3306长块”(而不是“cat 3306长块”)。我们需要“长块”引擎在搜索“长块”时出现 注意:对于这个问题来说,这可能无关紧要,但是这个网站是使用P

忽略搜索词和字段中的空格,搜索字段的好方法是什么

例如:

SELECT * 
FROM tablename
WHERE NOSPACES(fieldname) LIKE '%{search term with spaces removed}%'
现实世界的例子:

我的客户有一个销售长块引擎的网站。然而,他们经常让人们在他们的网站上搜索“cat 3306长块”(而不是“cat 3306长块”)。我们需要“长块”引擎在搜索“长块”时出现


注意:对于这个问题来说,这可能无关紧要,但是这个网站是使用PHP5.3和。

我建议有很多方法,这取决于你想让它变得多么简单。我个人会使用全文搜索,使用这里列出的原则

但是您也可以使用正则表达式从搜索词中去掉空格,例如

$str=preg_replace('/\s+/', '', $str);

您可能还想考虑或使用MySQL的全文集进行全文搜索。我没有亲自使用它们,但我听说它们都优于mysql内置的全文索引

所有这些方法都需要注意的一点是,它们需要一个特殊的索引来保持更新,这会增加更多的维护和服务器开销

关于斯芬克斯的好文章:

对于一个不需要维护的解决方案来说,它只需将用户的搜索词按空格分割,并为每个搜索词添加“%term%”

此外,我还创建了一个特殊的搜索字段,即产品名称或编号,标记按字母顺序排列,空格和符号去除。每次产品名称更改时,您都需要更新此字段。然后,除了对原始字段进行查询外,我还将对新字段进行搜索。例如,如果您有一个类似“cat 3306 longblock”的产品名称,则创建一个产品名称搜索字段并放置“3306catlongblock”。当用户搜索
3306 long block
时,您可以通过剥离符号和拆分空格来处理搜索:

WHERE (other product name search clauses) OR 
    (product_name_search LIKE '%3306%' AND product_name_search LIKE '%longblock%')

这个过程不如freetext好,但它在产品名称和编号方面做得相当好。

有一种使用repace函数的方法。例如:

SELECT * FROM `products` where REPLACE(PartName, ' ', '') = REPLACE('0 1 3000 70 27', ' ', '')

谢谢你的回答。空格不在搜索词中。他们在我们正在搜索的领域。我们正在搜索“longblock”,该字段包含“longblock”。很遗憾,全文搜索不起作用,但Tim的“特殊搜索字段”建议起了作用。无论如何,谢谢你的回答!谢谢,蒂姆。特殊搜索字段可能会起作用。最大的问题是,当产品命名为“Cat 3306 Long Block”时,我们正在搜索“3306 Long Block”。请注意搜索词中缺少空格。您需要将搜索
3306 longblock
拆分为。。。例如“%3306%”和。。。像“%longblock%”对已处理产品\u name\u搜索字段一样,它可以工作,但在较大的数据库上效率很低