2012-03-29 118 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