Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/SQL检查数据库中是否已经存在类似的条目_Php_Mysql - Fatal编程技术网

PHP/SQL检查数据库中是否已经存在类似的条目

PHP/SQL检查数据库中是否已经存在类似的条目,php,mysql,Php,Mysql,我在我的网站上进行了一次搜索,我试图显示我网站上最流行的搜索词的列表。这有点不错,但它与字符串的匹配不够紧密 这是我目前正在使用的: $sql = "SELECT * FROM db WHERE r_name LIKE '%".$searchname."%' OR r_number like '%".$searchname."%' 但是,如果一个用户搜索sayGame Name,另一个用户搜索Game Name(Reviews),它会在我的数据库中添加两个条目,有没有办法在输入条目之前进行相似

我在我的网站上进行了一次搜索,我试图显示我网站上最流行的搜索词的列表。这有点不错,但它与字符串的匹配不够紧密

这是我目前正在使用的:

$sql = "SELECT * FROM db WHERE r_name LIKE '%".$searchname."%' OR r_number like '%".$searchname."%'

但是,如果一个用户搜索say
Game Name
,另一个用户搜索
Game Name(Reviews)
,它会在我的数据库中添加两个条目,有没有办法在输入条目之前进行相似性测试?

是的,有办法,但需要你稍微修改一下。有一个搜索叫做 SOUNDEX,它将匹配非常接近的东西。这可能不是一个完美的解决你的问题的办法,但它肯定会让你朝着正确的方向开始

SELECT*FROM db WHERE SOUNDEX(db.r_name)像SOUNDEX(“{$searchname}”)

我相信如果您有一个条目'lowercasexd',并且像soundex一样('what is lowercasexd?'),它会找到与'lowercasexd'关联的条目。
请注意,与索引数据库上的“=”搜索(在我的数据库上,它每秒执行5-6k个条目)相比,这种类型的搜索需要一点时间才能运行,因此不建议对任何大型数据库使用它。如果你想要一个近乎完美的解决方案,我建议你阅读一下谷歌的搜索机制,如果你的项目足够重要的话,可以查阅一些搜索引擎的源代码。

啊,搜索算法的大问题。很难找到确切的答案。解决方案包括按搜索词分解$searchname,并单独评估每个搜索词,以建立一个“相关性”值,该值可用于确定整个短语是否可以丢弃或作为自己的搜索存储在“搜索词”表中。感谢您的回复,我在数据库中有大约18193个条目,所以数量不多。我会试试你的解决方案。它是否会在VPS上使用大量的服务器资源作为im。如果您来回索引您的选项卡,并启用查询缓存、线程缓存和最大限度地优化所有内容,则在2.4M条目数据库上所有查询只需约5秒钟。一切都取决于数据库的优化程度。如果您正在研究优化工具,我建议您使用
mysqltuner.pl
。这是一个小脚本,将大大帮助你。您可以配置您的机器将使用多少RAM,用于优化的RAM/硬盘空间越多,所需使用的CPU就越少。