在导入数据之前对 MySQL 数据库列使用 php 函数
Using a php function on a MySQL database column before importing data
我已经与 mySQL 和 PHP 合作了几个月,并且正在为我的网站构建搜索功能。
此搜索功能有一个过滤器和一个搜索栏。该过滤器目前是通过使用 mySQL 的 "WHERE" 函数实现的,通过该函数我排除了任何不符合过滤器要求的行,以避免从 mySQL 传输大量数据。
我也想对搜索栏执行此操作,但想在页面标题和搜索词之间使用 PHP 的 levenshtein 函数。
有人知道 A. 这是否可能以及 B. 如何实现?也可能是 C.: 我是否应该担心我从 mySQL 传输的数据库的大小?它在什么时候对用户造成严重的延迟?
我如何完成过滤器实现的示例,它是在使用 AJAX.
调用的 PHP 函数中自动生成的
SELECT title, coverphoto, highteavegatag, pagename, totaltimemin, totaltimemax, preptimemin, preptimemax, date FROM recipes WHERE ((LOCATE('french',cuisine) > 0) AND (LOCATE('dutch',cuisine) > 0)) AND ((dietglnpv & 2 = 2) AND (dietGLNPV & 4 = 4)) AND ((LOCATE('sweet',pagecategory) > 0) AND (LOCATE('diner',pagecategory) > 0)) AND ((totaltimemin <= 331) AND (totaltimemax >= 85)) AND ((preptimemin <= 45) AND (preptimemax >= 28))
以及我想添加的内容的想法(我知道这行不通,但也许有办法)。
SELECT (...) FROM recipes WHERE (...) AND (levenshtein(searchstr,title) < 10)
我认为这很快就会变得非常低效。请记住,您可能不想在整个标题和搜索字符串之间做一个 levenshtein()
,而是在标题中的单词和搜索字符串中的单词之间。 PHP 手册对此并不清楚,但 levenshtein()
计算了 single-character 编辑的最小数量,而不仅仅是字符块的编辑。
大多数通用搜索引擎使用更复杂的方法。您可以使用 MySQL 中的 full-text searching 功能,或者您可以构建自己的系统。这通常意味着找到要搜索的列中出现的所有单词并为它们建立索引。这个索引是在任何搜索发生之前完成的,这样每个单独的搜索就不必查看所有文本。然后将搜索字符串与这些词进行匹配,并从中找到匹配的行。
我已经与 mySQL 和 PHP 合作了几个月,并且正在为我的网站构建搜索功能。 此搜索功能有一个过滤器和一个搜索栏。该过滤器目前是通过使用 mySQL 的 "WHERE" 函数实现的,通过该函数我排除了任何不符合过滤器要求的行,以避免从 mySQL 传输大量数据。 我也想对搜索栏执行此操作,但想在页面标题和搜索词之间使用 PHP 的 levenshtein 函数。
有人知道 A. 这是否可能以及 B. 如何实现?也可能是 C.: 我是否应该担心我从 mySQL 传输的数据库的大小?它在什么时候对用户造成严重的延迟?
我如何完成过滤器实现的示例,它是在使用 AJAX.
调用的 PHP 函数中自动生成的SELECT title, coverphoto, highteavegatag, pagename, totaltimemin, totaltimemax, preptimemin, preptimemax, date FROM recipes WHERE ((LOCATE('french',cuisine) > 0) AND (LOCATE('dutch',cuisine) > 0)) AND ((dietglnpv & 2 = 2) AND (dietGLNPV & 4 = 4)) AND ((LOCATE('sweet',pagecategory) > 0) AND (LOCATE('diner',pagecategory) > 0)) AND ((totaltimemin <= 331) AND (totaltimemax >= 85)) AND ((preptimemin <= 45) AND (preptimemax >= 28))
以及我想添加的内容的想法(我知道这行不通,但也许有办法)。
SELECT (...) FROM recipes WHERE (...) AND (levenshtein(searchstr,title) < 10)
我认为这很快就会变得非常低效。请记住,您可能不想在整个标题和搜索字符串之间做一个 levenshtein()
,而是在标题中的单词和搜索字符串中的单词之间。 PHP 手册对此并不清楚,但 levenshtein()
计算了 single-character 编辑的最小数量,而不仅仅是字符块的编辑。
大多数通用搜索引擎使用更复杂的方法。您可以使用 MySQL 中的 full-text searching 功能,或者您可以构建自己的系统。这通常意味着找到要搜索的列中出现的所有单词并为它们建立索引。这个索引是在任何搜索发生之前完成的,这样每个单独的搜索就不必查看所有文本。然后将搜索字符串与这些词进行匹配,并从中找到匹配的行。