以下是我的方案:我有一个搜索多个列的搜索
$sql = "SELECT * FROM $this->_table WHERE r_title LIKE ?
OR r_level LIKE ?
OR r_section LIKE ?
OR r_excerpt LIKE ?
ORDER BY r_id DESC"
这样做很有效,但例如标题可以是"Squash"
,该部分可以是"Soup"
,因此如果用户输入"squash soup"
,则不会返回任何结果。< / p>
这有意义吗?我怎样才能让它提供更相关的合并响应?
该部分在技术上被称为"Soups"not "Soup",
我仍然希望它返回&#34;南瓜汤&#34;如果该部分真的是soups,
,则忽略"s"
。
答案 0 :(得分:3)
您需要使用MySQL's search functionality。像这样:
SELECT * FROM table
WHERE MATCH(r_title, r_level, r_section, r_excerpt)
AGAINST (? IN BOOLEAN MODE)
ORDER BY r_id DESC
默认情况下,Boolean search会查找搜索词组中的任何字词,因此不需要进行预处理。您需要确保您的表格上有appropriate indices:
ALTER TABLE table
ADD FULLTEXT INDEX (r_title),
ADD FULLTEXT INDEX (r_level),
ADD FULLTEXT INDEX (r_section),
ADD FULLTEXT INDEX (r_excerpt);