Jam*_*ren 5 php mysql phpactiverecord
什么是搜索字段的好方法,忽略搜索词和字段中的空格?
例:
SELECT *
FROM tablename
WHERE NOSPACES(fieldname) LIKE '%{search term with spaces removed}%'
Run Code Online (Sandbox Code Playgroud)
现实世界的例子:
我的客户有一个销售长块发动机的网站.然而,他们经常让人们在他们的网站上搜索"cat 3306 longblock "(而不是"cat 3306 long block").当搜索"longblock"时,我们需要显示"长块"引擎.
注意:对于这个问题,它可能无关紧要,但是这个网站是使用PHP 5.3和phpActiverecord构建的.
您可能还想考虑使用Sphinx或Lucene进行全文搜索,例如对 mysql 全文进行搜索。我个人没有使用过它们,但我听说它们都优于 mysql 内置的全文索引。
所有这些方法需要注意的一件事是它们需要特殊的索引来保持更新,这会增加更多的维护和服务器开销。
关于sphinx的好文章:http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/
对于产品名称或数字效果良好的免维护解决方案,只需将用户的搜索词按空格分隔,并将每个搜索词添加 LIKE '%term%' 到您的查询中即可。
此外,我创建了一个特殊的搜索字段,它是产品名称或编号,其标记按字母顺序排列,并删除了空格和符号。每次产品名称更改时,您都需要更新此字段。然后,除了针对原始字段的查询之外,我还OR针对这个新的剥离字段进行搜索。例如,如果您的产品名称类似于“cat 3306 longblock”,则创建一个product_name_search 字段并放置“3306catlongblock”。当用户搜索时3306 long-block您通过删除符号并按空格分割来处理搜索:
WHERE (other product name search clauses) OR
(product_name_search LIKE '%3306%' AND product_name_search LIKE '%longblock%')
Run Code Online (Sandbox Code Playgroud)
此过程不如自由文本好,但对于产品名称和编号来说效果相当好。