执行此操作的最佳方法是什么?
我有以下列:track_name、artist_name、album_name
我希望所有列都与搜索查询相匹配。以及匹配时的一些灵 active 。
mysql 之类的太严格了,即使是%XXX%。它匹配整个字符串,而不是各个部分。
最佳答案
您的 MySQL 查询可能有多个 OR
子句,搜索用户输入的每个空格分隔的单词。例如,用户搜索“Queens of the Stoneage”可能会在 SQL 中表示为 SELECT * FROMongs WHERE Artist_name LIKE "%Queens%"OR Artist_name LIKE "Stoneage"
。
但是,这可能是不可取的,因为以 %
开头的 LIKE
搜索效率低下,并且在大型数据库上可能会非常慢。
虽然我无法谈论性能影响,但您应该看看 natural language full-text searches 。这可能是您会发现的最有效的解决方案:
SELECT * FROM 歌曲 WHERE MATCH(track_name, Artist_name, album_name) AGAINST('Queens of the Stoneage' IN NATURAL LANGUAGE MODE);
确实存在一些 PHP 函数来确定文本字符串的相似性,但将这项工作保留在数据库中可能是最有效的(并且不会那么令人沮丧):
关于php - 使用 PHP 和 Mysql 进行相关性搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7006209/