2012-03-29 19 views
1

Ich habe folgendes „Tweets“ Tabelle:Suchen forrecords in einer Datenbank, die eine bestimmte Zeichenfolge enthält

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! 

ich zählen mag, für jeden Benutzer, die Anzahl der Tweets, die {TAG} mindestens einmal enthält. Das Tag könnte irgendwo im Tweet sein: am Anfang, in der Mitte oder am Ende (gelesen: nicht gefolgt von einem Leerzeichen oder irgendetwas). Die Tabelle hat Millionen von Datensätzen, daher suche ich nach einer effizienten Möglichkeit, dies zu tun. Mein erster Versuch

SELECT COUNT(tweet_id) FROM tweets WHERE `text` LIKE '%{TAG}%' AND user_id = 2 

war aber die 0 zurück, während in diesem Beispiel wurde erwartet, 2. Also zwei Fragen zurück: (i), was mache ich falsch und (ii) ist es eine effizientere Art und Weise um dies zu tun?

[EDIT]

Ich mag würde das Ergebnis in die „Benutzer“ Tabelle einfügen:

user_id tweets_with_tag 
2  2 
3  0 
4  9 

Ist es möglich, in derselben Abfrage zählen und einfügen?

+0

Wie oft möchten Sie solche Werte in die Tabelle "users" einfügen? Vielleicht möchten Sie [View] (http://dev.mysql.com/doc/refman/5.0/en/create-view.html) anstelle der regulären Tabelle verwenden? – mkk

+0

Ich habe etwa 100.000 Benutzer und ein paar Millionen Tweets. Ich muss das nur einmal tun - es ist für Forschungszwecke auf einem statischen Datensatz, anstatt für eine Live-Anwendung. – Pr0no

Antwort

3

einzufügen:

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: Wenn die Benutzertabelle existiert bereits die folgenden

tun
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

Ich habe einen Fehler gemacht: Die Tabelle USER ist eine existierende Tabelle. Ich habe eine Spalte "tweets_with_tag" erstellt, die nur aktualisiert werden muss. Mache ich das richtig? UPDATE Benutzer SET tweets_with_tag = SELECT COUNT (tweet_id) AS 'tweet_with_tag' VON Tweets WHERE Text LIKE '{TAG}%' GROUP BY Benutzer-ID – Pr0no

+0

@Reveller Überprüfen Sie meine Bearbeitung, ich habe den Code für die vorhandene User-Tabelle enthalten :) – mattytommo

+0

Danke ! Ihre Hilfe wird sehr geschätzt :) – Pr0no

Verwandte Themen