[英]Count substrings in SQL (in Digital Metaphors' ReportBuilder)
[英]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.