以度数符号存储,无需 php SQL LIKE 语句即可搜索
stored with degree symbol, be able to search without, php SQL LIKE statement
我构建的搜索功能有点问题。
我在 mysql table 中有一列名为:标题 (utf8_swedish_ci)
这是大约 20.000 个标题中的 2 个标题:
50° Riesling Réserve Trocken
50° Parallel Riesling Trocken
有什么办法可以让用户搜索没有度数符号的 50 Riesling 或 50 Parallel 吗?
我的代码:
$search = str_replace("\'","’", $_GET['searchString']);
$search = htmlentities($search);
$search = esc_sql($search);
$search = trim($search);
if(!empty($_GET["searchString"])){
$str .= "`title` LIKE '%".$search."%' AND ";
}
SQL 声明(部分,关于此):
$res = $wpdb->get_results("SELECT * FROM searchtbl WHERE ".$str." ORDER BY ".$sortby." ".$sort." LIMIT 500");
作为一个额外的问题:
是否有一些 "easy" 方法可以让用户能够搜索 50 Riesling 并找到这两个项目? (它与很多标题相关,而不仅仅是这两个)
您可以使用 REPLACE()
从要与输入字符串进行比较的列中删除度数符号:
SELECT *
FROM searchtbl
WHERE REPLACE(title, '°', '') LIKE '50 Riesling'
如果您还有其他有问题的字符,您可以尝试类似的方法。我省略了 PHP 代码,但我会把它留给你作为练习。
您有多个选项,您甚至可以组合这些选项以获得所需的输出。
在 table 中创建另一个字段,在其中存储没有任何特殊字符的标题,例如 °
和 运行 两列的搜索或者你也从 seraches 中删除特殊字符。如果您有 mysql v5.7.6 或更高版本,那么使用生成的列是一个理想的解决方案。
您可以在 where 条件中搜索时删除这些特殊字符 'on the fly'。同样,生成的列可能是一个更快的解决方案。
使用全文索引和搜索。但是,您需要将默认的最小字长减少到 2,并且您可能还需要处理整理文件。 This SO topic 包含更多相关信息。
您可以将搜索字符串拆分为 php 中的单词,例如使用 explode() 和 serach 搜索不在单个搜索条件中的单词,而是在单独的搜索条件中。
后两种方法的优点是,如果以 50 雷司令为搜索条件,它们会找到这两条记录。
我构建的搜索功能有点问题。
我在 mysql table 中有一列名为:标题 (utf8_swedish_ci)
这是大约 20.000 个标题中的 2 个标题:
50° Riesling Réserve Trocken
50° Parallel Riesling Trocken
有什么办法可以让用户搜索没有度数符号的 50 Riesling 或 50 Parallel 吗?
我的代码:
$search = str_replace("\'","’", $_GET['searchString']);
$search = htmlentities($search);
$search = esc_sql($search);
$search = trim($search);
if(!empty($_GET["searchString"])){
$str .= "`title` LIKE '%".$search."%' AND ";
}
SQL 声明(部分,关于此):
$res = $wpdb->get_results("SELECT * FROM searchtbl WHERE ".$str." ORDER BY ".$sortby." ".$sort." LIMIT 500");
作为一个额外的问题: 是否有一些 "easy" 方法可以让用户能够搜索 50 Riesling 并找到这两个项目? (它与很多标题相关,而不仅仅是这两个)
您可以使用 REPLACE()
从要与输入字符串进行比较的列中删除度数符号:
SELECT *
FROM searchtbl
WHERE REPLACE(title, '°', '') LIKE '50 Riesling'
如果您还有其他有问题的字符,您可以尝试类似的方法。我省略了 PHP 代码,但我会把它留给你作为练习。
您有多个选项,您甚至可以组合这些选项以获得所需的输出。
在 table 中创建另一个字段,在其中存储没有任何特殊字符的标题,例如
°
和 运行 两列的搜索或者你也从 seraches 中删除特殊字符。如果您有 mysql v5.7.6 或更高版本,那么使用生成的列是一个理想的解决方案。您可以在 where 条件中搜索时删除这些特殊字符 'on the fly'。同样,生成的列可能是一个更快的解决方案。
使用全文索引和搜索。但是,您需要将默认的最小字长减少到 2,并且您可能还需要处理整理文件。 This SO topic 包含更多相关信息。
您可以将搜索字符串拆分为 php 中的单词,例如使用 explode() 和 serach 搜索不在单个搜索条件中的单词,而是在单独的搜索条件中。
后两种方法的优点是,如果以 50 雷司令为搜索条件,它们会找到这两条记录。