如何找到类似的帖子?

时间:2013-01-26 23:10:36

标签: php mysql

所以,我有PHP + MySQL。我正在浏览title列以找到最相似的字符串。

如何在数据库中找到最相似的字符串并按相似性排序?

4 个答案:

答案 0 :(得分:2)

您可以使用PHP函数levenshtein获取字符串之间的Levenshtein distance

Levenshtein距离衡量字符串的不同程度(反之,相似程度)。想象一下,你有3个字符串:

  • 查看现场运行
  • 观看现场直播
  • 您好,我的名字是John

使用Levenshtein距离,我们得到结果:

See spot run - See spot run: 0
See spot run - Watch spot run: 5
See spot run - Hello my name is John: 17

Watch spot run - See spot run: 5
Watch spot run - Watch spot run: 0
Watch spot run - Hello my name is John: 18

Hello my name is John - See spot run: 17
Hello my name is John - Watch spot run: 18
Hello my name is John - Hello my name is John: 0

如您所见,更多类似的字符串具有更低的Levenshtein距离。此解决方案并不总是切实可行,因为您必须将结果存储在要比较的每个字符串之间。因此,如果您已经有1000条记录,那么当您创建新记录时,您必须获得新字符串的结果与其他所有字符串的比较。然后,您可以在SQL查询中使用这些分数。

这对你来说可能不是最好的解决方案,但是因为没人提到它,我想我会这样做。

您还可以查看其他一些有趣的PHP函数以获得字符串相似性:

  • similar_text - 计算两个字符串之间的相似性
  • soundex - 计算字符串的soundex键

答案 1 :(得分:0)

你应该使用SELECT LIKE查询here就是一些文档。

答案 2 :(得分:0)

最简单的方法是在SQL查询中使用LIKE:

WHERE column_name LIKE '%string%'

您可以使用“%”替换空格以使其更有效。我不会称之为正确的方式,但考虑到你的问题应该足够好。

答案 3 :(得分:0)

我不确定你真正想做什么,但我认为你正在寻找在标题栏中找到最相似文字的查询。

如果确实如此,它可以提供帮助:

<强> SQL

SELECT * FROM yourTable where table LIKE '%searchedText%'

在这种情况下,%表示您找到包含searchedText

的内容