【发布时间】:2012-10-03 14:59:22
【问题描述】:
我目前的搜索结果如下所示:
SELECT s.ID
FROM Shoe s
INNER JOIN Account a
ON s.UserID = a.ID
WHERE s.Publish='1' AND
(s.Brand LIKE '%$Search%'
OR s.Name LIKE '%$Search%'
OR s.PrimaryColor LIKE '%$Search%'
OR a.User LIKE '%$Search%')
ORDER BY s.ID DESC
LIMIT $offset, $rowsPerPage"
当我进行诸如“Blue”或“Nikes”之类的搜索时,这可以正常工作,但如果我进行诸如“Blue Nikes”之类的搜索,则不会返回任何内容。我应该使用FULLTEXT 吗?我该如何改进呢?我希望能够搜索所有可能与搜索变量相关的列。
【问题讨论】:
-
是的,您应该使用 MySQL 的全文搜索功能或外部搜索索引。
-
在 LIKE 左侧使用通配符会阻止 MySQL 使用索引。根据您的需要,您可能还会查看 solr 之类的东西。
-
@SeanBright 我尝试将 Match Against 与全文结合使用,结果为零。我进一步搜索并发现了这个 - stackoverflow.com/questions/5925369/… 似乎因为“停止”词而不起作用。我在 mysql 上不太先进,所以如果我迷路了,请原谅我。
标签: php mysql join search sql-like