我目前的搜索结果如下:
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"
当我进行诸如“蓝色”或“耐克”之类的搜索时,此功能正常,但如果我执行“蓝色耐克”等搜索,则无法返回。我应该使用FULLTEXT
吗?我怎样才能改善这个?我希望能够搜索与搜索变量相关的所有列。
答案 0 :(得分:1)
所以在搞乱并测试不同的东西之后,我想出了这个:
"FROM Shoe AS s
LEFT JOIN Accounts AS a ON s.UserID = a.ID
WHERE (MATCH (s.Brand, s.Name, s.PrimaryColor AGAINST('$Search' IN BOOLEAN MODE)
OR MATCH (a.User) AGAINST('$Search' IN BOOLEAN MODE))
AND s.Publish='1'
ORDER BY s.ID DESC"
这似乎解决了我上面提到的问题,我现在可以进行搜索,例如“Blue Nike”和所有与blue& amp;耐克将出现。不确定这是否是最有效的方法,但确实有效。
答案 1 :(得分:0)
而不是LIKE
尝试使用SOUNDEX
或两者。
其次,您可能希望优化查询以维护大小写,例如:
(lower(s.Brand) LIKE '%" . strtolower($Search) . "%'
OR lower(s.Name) LIKE '%" . strtolower($Search) . "%'
OR lower(s.PrimaryColor) LIKE '%" . strtolower($Search) . "%'
OR lower(a.User) LIKE '%" . strtolower($Search) . "%')