在数据库中查找包含特定字符串的记录

时间:2012-03-29 11:15:36

标签: mysql sql

我有以下“推文”表:

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

是否可以在同一个查询中计算和插入?

2 个答案:

答案 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