Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
Blackman

Noch ein Problem mit MySQL-Abfrage

Recommended Posts

Also, ich glaube eher das mir nur Stefan hier helfen kann, aber vielleicht haben ja auch andere noch gute Tipps !

Für meinen Statistik-Mod brauch ich nämlich mal kurz ne Hilfe, ich weiß nämlich nicht wie ich eine Statistik der Smilie-Nutzung erstellen kann, derzeit geht das so:

SELECT image FROM ibf_emoticons

While

{

$smilie[] = $row["image"];

}

foreach ($smilie)

{

SELECT COUNT(*) as count FROM ibf_posts WHERE post LIKE '%".$smile."%'

}

arsort ($smiliesnow);

Und ?

Hat's jemand kapiert ?

Der erste SQL-Befehl (ist natürlich alles verinfacht dargestellt), holt alle Smilies die das Board in der Datenbank stehen hat in ein Array.

Und jetzt muss ich für jeden Array-Inhalt den ich hab, schauen wie oft er in den Beiträgen vorkommt.

DANN erst kann ich nach Häufigkeit sortieren !

Das heißt ich geb nur 10 smilies aus in der Statistik, trotzdem muss ich alle 50 smilies die in der datenbank stehen einlesen, und einzeln prüfen, soll heißen ich hab 51 (!) Datenbankabfragen !!!

Jemand ne Idee wie man das besser lösen könnte ?

Den ersten Query könnt ich los werden, indem ich die Dateinamen nicht aus der Datenbank, sondern aus dem Emoticons-Ordner hole - aber wie zum Teufel schaff ich es, das ich nicht für jeden der 50 smilies EINZELN eine SQL-Abfrage machen muss ???????

Vielen Dank, wer auch immer ne Ahnung hat, BLACK

Share this post


Link to post

Okay,bei deinen Beispiel setze ich gegen deine 51 Abfragen insgesamt 2, aber ich würde auch anders an das Problem rangehen. ;)

Folgender Ablauf wäre wohl sinnvoller:

1. Eine DB Abfrage, um alle Smilies in ein Array zu schreiben. Schlüssel für die Arraywerte würde ich den Smilienamen wählen (ggf. Sonderzeichen mit zusätzlicher Funktion ändern) und den Wert schon mal auf 0 setzen. Zusätzliche Informationen, die man für die Anzeige der Smilies braucht, natürlich auch speichern.

2. Db Abfrage der Postingtabelle mit Bedingung LIKE "<!--endemo-->", damit nur Postings aufgelistet werden, die Smilies enthalten.

3. Regulärer Ausdruck, der nach der Zeichenkette <!--emo&Beliebige Zeichen--> im Posting sucht und bei Fund (wäre ja Key beim Array, wenn man den regulären Ausdruck entsprechend erstellt) im Array dann den Zähler um 1 erhöht. (Ergebnisarray duchgehen)

4. Array nach Treffer sortieren (Sortierverfahren nach belieben) und nur die ersten 10 Positionen durchgehen.

5. Ausgabe ;)

Anmerkungen:

Ich würde wahrscheinlich den Durchgang zweimal machen, damit man Teilergebnise abspeichern kann. Zum Beispiel beim ersten Aufruf alle Postings bis vor 1 Monat und das Ergebnis mit Timestamp speichern, dann nochmal für die letzten zwei Monate und Ergebnisse addieren. Entsprechende Routinen implementieren, das wenn der Zeitraum, der nicht gespeichert wird, größer als X ist, wieder zweimal die Abfrage durchführt. Sprich diesmal ab dem letzten gespeicherten Wert bis 1 Monat vor aktuellen Datum, diese zu den schon gespeicherten Werten addiert und neu in der DB speichern. Dann wieder dynamisch denletzten Monat.

Vorteil ist halt, das bei Foren mit vielen Postings, die Performance nicht runtergezogen wird und den Ablauf, jedenfalls nach dem ersten Durchgang, erheblich beschleunigt.

Nachteil ist, das falls in alten Beiträgen editiert wird, neue Smilies nicht erfaßt werden. Jedoch ist dies wohl vernachlössigbar gering und kann zu Gunsten der Performance vernachlässigt werden. Ansonsten kann man auch die gespeicherten Werte löschen und die entsprechende Routine würde eine Neuberechnung durchführen.

Wie du siehst, ist das nicht wirklich schwer und hoffe, das meine Ausführungen dir geholfen haben. :)

Ach ja, bei deiner Themenbeschreibung hast du gelogen. :P

!vorsicht kompliziert!

Stimmt ja gar nicht und dabei hab ich mich schon auf ein anspruchvolles Problem gefreut. :lol::lol: :lol:

Edited by Stefan

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×