簡體   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