2012-03-29 144 views
1

我有以下的「鳴叫」表:尋找forrecords包含特定字符串

tweet_id user_id text 
--------------------------------------------------- 
1   2  this is a tweet with (TAG} in it 
2   2  tweet without a TAG 
3   2  {TAG} another {TAG} tweet 
4   4  look at my {TAG} and weep! 

我想算,爲每個用戶,包含{TAG}至少一次鳴叫的次數。標籤可以在推文中的任何地方:在開始,中間或結束時(閱讀:沒有後面跟着空格或任何東西)。該表擁有數百萬條記錄,所以我正在尋找一種有效的方法來完成此操作。我第一次嘗試是

SELECT COUNT(tweet_id) FROM tweets WHERE `text` LIKE '%{TAG}%' AND user_id = 2 

但這返回0,而在這個例子中,它有望恢復2。所以兩個問題:(一)我在做什麼錯誤以及(ii)有沒有更有效的方法去做這個?

[編輯]

我想結果插入到「用戶」表:

user_id tweets_with_tag 
2  2 
3  0 
4  9 

是否有可能算在同一查詢插入?

+0

您希望將這些值插入「用戶」表中的頻率如何?也許你想使用[View](http://dev.mysql.com/doc/refman/5.0/en/create-view.html)而不是常規表? – mkk 2012-03-29 11:22:52

+0

我有大約100.000個用戶和幾百萬條推文。我只需要做一次 - 它用於研究靜態數據集,而不是實時應用程序。 – Pr0no 2012-03-29 11:33:14

回答

3

要插入:

INSERT INTO users(user_id, tweets_with_tag) 
SELECT COUNT(tweet_id) as 'tweets_with_tag', 
[user_id] as 'user_id' 
FROM tweets 
WHERE text LIKE '%{TAG}%' 
GROUP BY user_id 

編輯:如果用戶表已經存在執行以下操作

UPDATE users 
SET tweets_with_tag = (
    SELECT COUNT(tweet_id) as 'tweets_with_tag' 
    FROM tweets 
    WHERE text LIKE '%{TAG}%' and user_id = users.user_id 
    GROUP BY user_id) 
+0

我犯了一個錯誤:USER表是現有的表。我創建了一個'tweets_with_tag'列,它只需要更新。我做對了嗎? UPDATE users SET tweets_with_tag = SELECT COUNT(tweet_id)AS'tweet_with_tag'FROM tweets WHERE text like'{TAG}%'GROUP BY user_id – Pr0no 2012-03-29 11:48:01

+0

@Reveller檢查我的編輯,我已經包含現有用戶表的代碼:) – mattytommo 2012-03-29 11:56:35

+0

謝謝!你的幫助真的很感謝:) – Pr0no 2012-03-29 12:10:12