簡體   English   中英

SQL mediumtext從列表中計算子字符串

[英]SQL mediumtext count substrings from list

我正在嘗試為MyBB論壇開發一些“壞詞”插件,我想請教您對SQL命令的幫助。

讓我們簡單地解決相關列的解決方案:

表:單詞
Column1:number,recordID
Column2:varchar,badWord
- 此表僅包含不允許的單詞列表

表:帖子
Column1:number,postID
Column2:number,userID
第3欄:mediumtext,postBody
- 是發布的id,誰發送它和帖子的文本。

表:用戶
Column1:number,userID
Column2:number,badWordCount
-basic usere table由我的專欄擴展,包含了許多不良單詞

現在。 是否存在針對此請求的純SQL解決方案?

對於“posts”中的每一行,選擇mediumtext列“postBody”。 進入后,循環“單詞”表。 每當您攔截任何不良單詞時,請按用戶ID將users.badWordCount添加+1。

在一篇文章中,可能有許多不同(或相同)的壞詞。 我需要找到所有這些並計算它們,然后將每個用戶的壞詞數量添加到創建的帖子中

用於演示:

單詞(id,badWord):
1,fck
2,btch

帖子(postID,userID,postBody):
1,1,你好,fck你btch
2,2,不,你搞怪你
3,1,Aaah,你好嗎

執行后,它應該導致

用戶(userID,badwordCount)
1,3
2,2

有一種純粹的SQL方法,雖然這可能不是最好的方法。

select userId,
       sum(length(replace(concat(' ', w.postBody, ' '), concat(' ', w.badword, ' '), concat(w.word, '123'))) -
           length(concat(' ', w.postBody, ' '))
          )
from posts p join
     words w
     on concat(' ', w.postBody, ' ') like concat('% ', w.badword, '% ')
group by userId;

空格用於分隔文本中的單詞。 這可能不是您的目的所必需的。 沒有空間邏輯看起來像:

select userId,
       sum(length(replace(w.postBody, w.word, concat(w.badword, ' '))) -
           length(w.postBody)
          )
from posts p join
     words w
     on w.postBody like concat('% ', w.badword, '% ')
group by userId;

我的想法是使用like來查找帖子中的單詞。 然后通過用長度更長的東西替換單詞來計算單詞的數量。 然后,測量更換后的長度變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM