Поиск записей в базе данных, содержащей определенную строку - PullRequest
1 голос
/ 29 марта 2012

У меня есть следующая таблица «твитов»:

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) есть ли более эффективный способ сделать это?

[EDIT] * * +1010

Я хотел бы вставить результат в таблицу "users":

user_id  tweets_with_tag
2        2
3        0
4        9

Можно ли считать и вставлять в один и тот же запрос?

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Для вставки:

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

Редактировать: если таблица User уже существует, выполните следующие действия:

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 голос
/ 29 марта 2012

Ваша первая запись в твитах имеет (TAG}. Вот почему она не берется. Запрос возвращает 1 как правильный.

Что касается вставки, вы можете использовать INSERT INTO.. конструкция SELECT. Хорошая ссылка на http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...