PHP - Voting auswerten

Zneaf

Erfahrenes Mitglied
Hey Leute ;)

ich biete den registrierten Usern meiner Website seit einigen Tagen die Möglichkeit, ihre Lieblingstracks in die Charts zu voten(wählen).
Die beliebtesten 50 Tracks sollen zukünftig einmal monatlich in einer seperaten Charts-Sendung Live von unseren DJ's gespielt werden.

Das Script, mit dem die User ihre Lieblings-Songs in die Charts voten können funktioniert bereits einwandfrei.

Hier Kurze Beschreibung des Voting-Scripts mit dem die User ihre Lieblings-Songs in die Charts voten:
In unserer Tracklist wird zu jedem aufgelisteten Song ein Voting-Button eingefügt. Klickt ein User diesen Button an, werden folgende Daten in einer DB in der Tabelle "charts" eingetragen: userid, interpret, title und ein timestamp. D.h. wenn 2 User den gleichen Song voten, steht dieser auch 2mal in der DB (aber mit unterschiedlicher user-id und unterschiedlichem timestamp).

Mein Ziel ist es:
Ein simples Script zu erstellen, dass mir anzeigt, welche Songs gevotet wurden und welcher Song wie oft gevotet wurde. Das ganze soll auch nicht grafisch werden oderso...schlichte Zahlen würden mir als Ergebnis völlig genügen.

Nun suche ich seit einigen Tagen im Internet nach Scripten bzw. Tutorials mit einer ähnlichen Funktion...leider vergebens (sorry).

Hier meine Fragen:
1. Lässt sich das umsetzen?
2. Wie könnte ich die Daten (die aus der DB ausgelesen werden) so filtern, dass ich das gewünschte Ergebnis erhalte?


Wenn ihr Fragen haben solltet, so zögert nicht, diese zu stellen.

Über eure Hilfe würde ich mich sehr freuen :)

Vielen Dank im Voraus =)

LG Zneaf
 
Ich würde nicht den Titel eines Liedes und den Interpreten speichern, sondern nur eine Song-ID. Du müsstest alle eure Lieder durchnummerieren. Dafür sparst du dir eine Spalte in der Tabelle und ne Menge vergleichsarbeit.
Danach speicherst du in einem Assoziativen Array den ID und die Anzahl der Klicks. Vieleicht wäre auch ne Klasse geeignet die Zusätzlich alle User-IDs speichert, um zu prüfen ob keiner doppelt geklickt hat.
Wobei diesen Schritt könnte man auch schon beim einfügen in die DB machen...
Sei kreativ!!
LG Entwicklerpages

Oh, wie gut kannst du eigentlich PHP. Deine Webseite hört sich nachm Webradio an. Bist du dort der Programmierer oder "die Radioleitung", die nur ein wenig PHP kann?
Wenn es Nummero 2 ist, entschuldige ich mich und würde mal kucken ob ich schnell nen Code basteln kann...
 
Zuletzt bearbeitet:
Das mit der id geb ich Entwicklerpages recht

Dann kannst du die Daten mit SQL bereits zusammenrechnen
SQL:
SELECT
    song_id,
    -- Pro song_id alle User einmal zählen (doppeltes Voting vrhindern)
    COUNT(DISITNTC user_id) AS vote_counts
FROM
    votes
WHERE
    -- Einschränken auf ein zeitlichen Bereich. In diesem Fall alle Votings innerhalb des letzten Monats
    vote_date BETWEEN DATE_SUB(NOW()', INTERVAL 1 MONTH) AND NOW()
GROUP BY
    song_id
 
Zuletzt bearbeitet von einem Moderator:
Hi ;)

vielen Dank für die superschnelle Antwort :)

Die Idee mit den Song-ID's hatte ich auch schon, aber wir haben momentan knapp 1000 Songs und es kommen immer wieder welche dazu.
Deswegen habe ich mich gegen diese Möglichkeit entschieden.

Die User können übrigens jeden Song nur einmal voten, da ich danach den Button beim jeweiligen ausblenden lasse, nachdem er den Song einmal gevotet hat.

Ich bin übrigens der "Programmierer", für den das Programmieren nur Hobby ist :D
Ich bilde mir aber ein, dass ich schon einiges verstehe (auch wenn ich öfters mal im Forum nachfrage oder im Internet etwas durchlese ^^ ).

Habt ihr vielleicht eine Idee, wie man das ganze erreichen könnte, ohne den gesamten Songs eine ID zuzuweisen?

@Yaslaw: Danke für das Code-Beispiel :) Kann ich den ersten Teil dann einfach abändern auf eine Mischung aus Interpret und Titel?

Vielen Dank für eure Unterstützung :)

Schönen Abend noch

LG Zneaf ;)
 
Hi :)

es ist so, dass ich die DB mit den Votings jeden Monat leere.
Daher sollten die Performance nicht zu schlecht sein oder liege ich da mit meiner Vermutung falsch?

Vielen Dank =)

LG Zneaf ;)
 
Hey Leute :)

ich habs geschafft!
Hab die DB etwas abgeändert: anstelle von 2 Spalten (für Interpret und Titel) gibt es nun nurnoch eine Spalte die sich "song" nennt. In dieser Spalte steht nun "Interpret - Titel".
Dann lasse ich in meinem SELECT einfach darauf überprüfen und zählen.

Funktioniert super ;)

Danke für eure Hilfe

LG Zneaf :)
 
Das ist schön zu hören. Wie gesagt: Sei kreativ! ;-)
Wobei IDs besonders bei vielen Liedern, wie Yaslaw bereits gesagt hat, vielleicht doch ne bessere Idee wäre.
Noch ist es nicht zu spät. Wo liegen eure Songs? Wenn sie in einer DB liegen (davon gehe ich mal aus) müsstest du nur eine Spalte mit dem Id hinzufügen und Auto_Increment aktivieren. Und am bessten die ID Spalte als Primary-Schlüssel definieren. (Am besten in phpMyAdmin) Mit Glück nummeriert MySQL gleich alle Lieder. Ich weiß es nicht habs noch nicht gemacht. Wenn du pech hast, schreibst du dir ein Script, das allen Einträgen einen ID zuweist. Da der ID steigt musst du warscheinlich für jedes Lied eine Query Senden. Wenn es keine bessere Lösung gibt, würde ich vor der Ausführung des Scriptes die Maximallaufzeit der Scripte in der PHP.ini verlängern. Wenn du keinen zugriff auf diese hast, schreibst du das Script so, das nur z.B. 100 Querys abgesendet Werden. So kämpfst du dich stückchenweise an dein Ziel.
Wie schon dreimal gesagt/geschrieben Sei kreativ! Ich denke, ich du diesen Spruch in meine Signatur...
 
Hey ;)

danke für dn Tip.
Aber die Songs liegen nirgends (zumindest nicht alle).

Es gibt eine Tracklist-DB in der immer 75 Songs liegen (immer die 75 zuletzt gespielten songs).

Von daher rentiert sich das ganze nicht wirklich :)

Trotzdem vielen Dank für den Tip =)

LG Zneaf
 
Zurück