我有一个数据库位置表,其中包含两行标题和说明
我像这样通过PHP和MYSQL进行了搜索
$select_place = $mysqli->query("SELECT * FROM places where title LIKE '%$searchname%' or description LIKE '%$searchname%'");
$num_place = $select_place->num_rows;
while ($rows_place = $select_place->fetch_array(MYSQL_ASSOC)){
$id_place = $rows_place ['id'];
$title_place = $rows_place ['title'];
$description_place = $rows_place ['description'];
echo "<p>{$title_place}</p><br>";
}
Run Code Online (Sandbox Code Playgroud)
它运作良好,但是,例如,如果您搜索“塔”一词,却以诸如twer或towr的错误方式编写,则它不起作用。如何使它更智能?
一个好的选择是包含 MySQLSOUNDEX()函数:
SELECT
*
FROM
places
WHERE
title LIKE '%$searchname%'
OR description LIKE '%$searchname%'
OR SOUNDEX(title) = SOUNDEX('$searchname')
OR SOUNDEX(description) = SOUNDEX('$searchname')
Run Code Online (Sandbox Code Playgroud)
这将与您的示例中的 和 相towr匹配twer。
更多内容可以在这里找到:
http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex
注意:
目前实现的此函数旨在与仅英语语言的字符串配合良好。其他语言中的字符串可能不会产生可靠的结果。
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |