2012-10-04 149 views
4

我有一張表,其中存儲了許多Twitter推文的信息,包括推文文本和推文推文用戶的屏幕名稱。該tweet中包含主題標籤(以#開始),我要算一個特定的用戶在推特主題標籤的數量:計算MySQL列中子字符串的出現次數

tweet_id |      tweet_text       | screen_name | 
-------------------------------------------------------------------------------------------- 
     1 | #hashtag1 #otherhashtag2 #hashtag3 some more text   | tweeter_user_1 | 
     2 | some text #hashtag1 #hashtag4 more text     | tweeter_user_2 | 
     3 | #hashtag5 #hashtag1 @not a hashtag some#nothashtag   | tweeter_user_1 | 
     4 | #hashtag1 with more text         | tweeter_user_3 | 
     5 | #otherhashtag2 #hashtag3,#hashtag4 more text    | tweeter_user_1 | 

如果我算tweeter_user_1的主題標籤,結果我想到的是8,如果我想tweeter_user_3的標籤應該返回1.我怎麼能這樣做,假設我的表名是推文。

我嘗試這樣做:SELECT COUNT(*) FROM tweets WHERE(LENGTH(REPLACE(tweet_text, '#%', '@') = 0)) AND screen_name = 'tweeter_user_1'但它沒有工作

我會很高興,如果tweeter_user_1的結果是9太:d

+2

如果這是你想要的'主題標籤number',則是這樣的:'SELECT SUM(長度(tweet_text) - 長(REPLACE(tweet_text, '#', '')))FROM推文WHERE screen_name ='tweeter_user_1''應該可以工作。 – dash

+0

事實上,如果可能的話,你會遇到困難的時候不匹配一些#nothashtag#JYelton的建議是一個好的 - 預先存儲 - 它永遠不會改變。 – dash

+0

是的,這就是爲什麼我更新了「沒關係,如果我得到了9的計數」這個帖子,JYelton的想法非常好,但是桌子已經很大了,我只需要這個腳本來計算一個人的hashtags的數量我們檢測到濫用系統。此外,申請將在3或4周內結束。 – Tales

回答

8

這應該給你一個screen_names列表和他們使用的所有hashtags的總數。

SELECT foo.screen_name, SUM(foo.counts) FROM 
    (
    SELECT screen_name, 
      LENGTH(tweet_text) - LENGTH(REPLACE(tweet_text, '#', '')) AS counts 
    FROM tweet_table 
) as foo 
GROUP BY foo.screen_name 

但是....這是一個討厭的查詢,如果表是巨大的。如果您只需要單個用戶的計數,我可以在內部選擇中指定特定的用戶。就像這樣:

SELECT foo.screen_name, SUM(foo.counts) FROM 
(
    SELECT screen_name, 
     LENGTH(tweet_text) - LENGTH(REPLACE(tweet_text, '#', '')) AS counts 
    FROM tweet_table WHERE screen_name = 'tweeter_user_1' 
) as foo 
GROUP BY foo.screen_name 
+0

我認爲它有一些錯誤,當我運行這個腳本時,我總是收到錯誤信息:#1064 - 你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'WHERE screen_name ='LozanoXiomii'附近使用正確的語法)AS foo FROM tweet_table)作爲foo GROUP – Tales

+0

@Tale yup,把錯誤的地方放在哪裏...更新後的查詢例如 – Ray

2

根據您需要多長時間運行查詢,你可以導致MySQL花費大量CPU時間解析並重新編譯tweet_text列。我強烈建議添加hashtag_qty列(或類似列),並在您填充行開始時存儲hashtag元素的數量。

+0

感謝您的建議,這是一個非常好的主意,我會保留它以備將來參考,因爲我們可能會使用高音標籤開始更多的比賽,而且我們的雜誌擁有大量跟隨我們的人。 – Tales

相關問題