繁体   English   中英

在多个段落中搜索多个单词短语(PHP / MySQL)

[英]Searching for multi word phrases in multiple paragraphs (PHP/MySQL)

问题的前提是:

我有一个表(让我们称之为提交的表),其中包含(在其他相关数据中)一个文本字段,称为para ,其中包含用户提交的段落。

这些段落有时包含多个单词短语 ,可以包含在另一个表的字段中(让我们称之为表),称为名称

这两张桌子都很大。 提交的表有超过400,000行表有超过1,400,000行


问题:

我想浏览所有para字段,如果任何段落中出现表中的任何短语(可以> = 1个字),请将这些特定短语链接到表中的名称 ID。

复杂的是, 名称字段中的单词数量不固定,不同的名称字段值可以以相同的单词开头(例如,汤姆克兰西和汤姆克兰西的彩虹六是两个不同的条目) 此外,该短语可以出现在任何地方和para字段中,并且一个para可以匹配多个名称


一个例子

如果一个段落是:

我玩了很多游戏,到目前为止我最喜欢的是Tom Clancy的Rainbow Six。

另一个段落是:

该系列中最好的是最初的Tom Clancy和Tom Clancy的Rainbow Six Rogue Spear。

如果表是这样的:

╔═════╦══════════════════════════════════════╗
║ ID  ║                 name                 ║
╠═════╬══════════════════════════════════════╣
║ 101 ║ Tom Harding                          ║
║ 102 ║ Tom Clancy's                         ║
║ 103 ║ Tom Clancy's Rainbow Six             ║
║ 104 ║ Tom Clancy's Rainbow Six Rogue Spear ║
╚═════╩══════════════════════════════════════╝

然后我希望结果看起来像:

I've played many games and the best one I've liked so far is <a href="www.example.com/name/103">Tom Clancy's Rainbow Six</a>.

The best in the series are the original <a href="www.example.com/name/102">Tom Clancy's</a> and the <a href="www.example.com/name/104">Tom Clancy's Rainbow Six Rogue Spear</a>.


什么是解决这个问题的最佳方法? 我不应该通过加入这样做,对吗?

非常感谢您的投入!

有一些疯狂的长查询,如果你submitted表有一个id,在我的例子中,我给它一个名为sid的列,这里是SQLFiddle

查询的作用是加入由sid,length(name)DESC排序的values ,因为你想先替换最长的名字,但不是立即替换而是用[103]或[104]替换它(名称的id)在值),所以一旦它被替换,较短的名称(部分匹配)将找不到我们想要的另一个匹配。 然后我用html链接替换这些[103],[104]值。 这是两次应用的相同方法。 该方法沿途生成一些ID,以跟踪我们想要返回的行,该行始终是某个sid的最后一行,因为此时所有匹配都已正确替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM