[英]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.