使用PHP从MySQL数据库中选择可能相关的项目(例如:对于“橙色”,给出“面包”)

使用PHP从MySQL数据库中选择可能相关的项目(例如:对于“橙色”,给出“面包”),php,mysql,string,select,similarity,Php,Mysql,String,Select,Similarity,我有一个系统,我必须选择类似的记录。假设一个数据库包含一个大的产品列表,当用户输入产品的部分名称时,会出现一个产品列表,作为他正在搜索的产品的建议。这些产品的描述字段也较长 我认为,这不是像“%entered\u string%”这样的WHERE产品名称查询。该逻辑类似于可能使用的单堆栈溢出,id est:当您提出问题时,它会提示您可能已经有您的答案的问题和类似的问题,这两个问题显然都是使用一种方法从我的问题标题/内容中推导出我想要问的内容,并对数据库进行搜索,显示结果 我只是想知道使用PHP和

我有一个系统,我必须选择类似的记录。假设一个数据库包含一个大的产品列表,当用户输入产品的部分名称时,会出现一个产品列表,作为他正在搜索的产品的建议。这些产品的描述字段也较长

我认为,这不是像“%entered\u string%”这样的WHERE产品名称查询。该逻辑类似于可能使用的单堆栈溢出,id est:当您提出问题时,它会提示您可能已经有您的答案的问题和类似的问题,这两个问题显然都是使用一种方法从我的问题标题/内容中推导出我想要问的内容,并对数据库进行搜索,显示结果

我只是想知道使用PHP和MySQL作为数据库是否可以实现

例如:
输入食物会给我们带来像1公斤橘子、面包和饼干这样的结果。这两种产品都有相似之处,可以通过编程将它们彼此链接起来。

如果您希望类似的产品出现,您需要将这些信息放入数据库中。 所以,为食物做一个分类,并将每一种食物产品分配到这个分类。这样你可以很容易地选择类似的产品。没有其他有效的方法可以做到这一点

因此,您的数据库:

categories:
|id|name
 1    fruit
 2    Cars

Products
|id|name|category_id
  1  apple 1
  2  Ford focus  2
您可以这样选择:

SELECT `name`,`id` FROM `products` WHERE category_id = 1;
注释中建议的另一种方法是标记

Products
|id|name|tags
  1  apple "fruit food delicious" 
  2  Ford focus  "Car wheels bumper"
最好的方法是对标签进行全文搜索:

SELECT * FROM `products` WHERE MATCH(tags) AGAINST ('fruit')

确保标签上有全文索引

有很多方法可以解决这个问题。但我认为最直接的方法是在每个项目中映射多个关键字/标记。因此,当用户输入时,您将不会搜索项目表,您应该搜索映射的关键字,并根据该搜索加载相关项目。

是的,这是可能的。没有,没有现成的东西。你需要定义你自己的“相似性”函数。阅读全文搜索有很多可能的方法。例如,可以通过使用标签标记产品来解决这一问题;因此,如果两个产品有一些共同的标签,它们将是相似的。顺便说一句,我可以建议更改一下这个问题的标题吗?我想这更多的是同义词,而不是单词的实际相似性。