我有一个系统,我必须在其中选择"相似"的记录。想象一个包含大量产品列表的数据库,当用户输入产品的部分名称时,会出现一个产品列表作为关于他正在搜索的产品的建议。这些产品也有更长的描述字段。
我认为,这不是关于WHERE product_name LIKE '%entered_string%'
查询。该逻辑类似于 Stack Overflow 可能使用的逻辑,id est:当您提出问题时,它会提示您可能已经有您答案的问题和类似问题,两者都显然使用一种方法从我的问题标题/内容中得出我想问的内容,并根据数据库进行搜索,显示结果。
我只是想知道它是否可以使用 PHP 并使用 MySQL 作为数据库来完成。
例:输入food
应该给我们这样的结果 1kg oranges
, bread
和 cookies
.这两者都有类似的东西,可以帮助以编程方式将它们相互链接。
有很多方法可以处理这种情况。 但我认为直接的方法是将多个关键字/标签映射到每个项目。 因此,当用户键入时,您不会搜索项目表,您应该搜索映射的关键字,并基于该搜索加载相关项目。
如果您希望显示类似的产品,则需要将该信息放入数据库中。因此,为食品创建一个类别,并将每种食品分配给该类别。这样您就可以轻松选择类似的产品。没有其他有效的方法可以做到这一点
所以你的数据库:
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')
确保标记上有全文索引。