我有以下“推文”表:
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.所以有两个问题:(i)我做错了什么,(ii)有更有效的方法吗?
[编辑]
我想将结果插入“users”表:
user_id tweets_with_tag
2 2
3 0
4 9
是否可以在同一个查询中计算和插入?
答案 0 :(得分: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)
答案 1 :(得分:1)
你在推文中的第一个条目有(TAG)。这就是为什么它没有被选中。查询返回1是正确的。
就插入而言,您可以使用INSERT INTO .. SELECT构造。一个很好的参考是http://dev.mysql.com/doc/refman/5.0/en/insert-select.html