2012-03-29 6 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. Так два вопроса: (I), что я делаю неправильно, и (б) есть более эффективный способ сделать это?

[EDIT]

Я хотел бы, чтобы вставить результат в таблицу «пользователи»:

user_id tweets_with_tag 
2  2 
3  0 
4  9 

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

+0

Как часто вы хотели бы вставлять такие значения в таблицу «users»? Возможно, вы хотите использовать [View] (http://dev.mysql.com/doc/refman/5.0/en/create-view.html) вместо обычной таблицы? – mkk

+0

У меня около 100 000 пользователей и несколько миллионов твитов. Я только должен сделать это один раз - это для исследовательских целей статический набор данных, а не что-то для живого приложения. – Pr0no

ответ

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 

Edit: Если таблица пользователя уже существует сделать следующее

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 SET tweets_with_tag = SELECT COUNT (tweet_id) AS 'tweet_with_tag' ОТ твитов WHERE text LIKE '{TAG}%' GROUP BY user_id – Pr0no

+0

@Reveller проверить мое редактирование, я включил код для существующей таблицы пользователя :) – mattytommo

+0

Спасибо ! Ваша помощь действительно оценена :) – Pr0no

1

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

Что касается вставки идет, вы можете использовать INSERT INTO. .. ВЫБРАТЬ конструкция хорошая ссылка на http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

Смежные вопросы