[MYSQL] Abfragesystematik

Topol

Mitglied
Hallo,

ich komme bei einer Datenbankabfrage die ich brauche leider nicht auf den richtigen Weg.

Situation: Soziales Netzwerk mit Forum, Likes und Abstimmungen.

Soll: Übersichtsseite mit den 10 aktivsten Usern. Die Reihenfolge soll nach Punkten (Posts, Likes auf seine Posts, Abstimmungen...) zusammengerechnet werden und auf 10 limitiert und nach Punkten sortiert werden.

Tabellenstruktur:

usertabelle [userID,name]
abstimmungen [id]
abstimmungen_votes [id,userID]
posts [userID, likes]

Ich komm soweit, dass ich für jeden User verschiedene Abfragen mache und dann zusammenzähle, aber für alle User sortiert nach Punkten absteigend und limitiert nach 10 bekomm ich nicht hin.

Hat wer nen Denkanstoß oder eine Lösung?

Mit freundlichen Grüßen
Topol
 
Die Tabellen abstimmungen_votes und posts mittels UNION ALL zusammenziehen. Dann ein GROUP BY auf userID darüber und einen COUNT(*) anhängen.
Am Schluss noch nach dem Count absteigend sortieren und ein LIMIT auf 10 setzen
 
Ich hoffe ich habe keinen Denkfehler, habe deinen Vorschlag gerade getestet und bekomme dann alle Zeilen (posts und abstimmungen) pro User. Aber die absoluten Likes (Tabelle Posts) werden nicht richtig dazugezählt.
Theoretisch müsste er irgendwie alle Zeilen pro User der Tabelle pet_votes zusammenzählen, alle Zeilen pro User der Tabelle posts PLUS den absoluten Wert der Likes (von anderen Leuten auf dessen Post).

Hier mein "Versuch":

SQL:
SELECT COUNT( * ) + likes AS punkte, userID
FROM (
SELECT id AS forumpostid, userID, up AS likes, NULL AS abstimmung_id
FROM pun_posts
UNION ALL 
SELECT NULL , userID, NULL , id AS abstimmung_id
FROM abstimmungen_votes
) AS ERGEBNIS
GROUP BY userID
ORDER BY punkte DESC 
LIMIT 10
 
Zuletzt bearbeitet von einem Moderator:
Ok hat geklappt.

Musste..

SELECT COUNT(*) + sum(likes) AS punkte

..schreiben.

Die Gesamtpunktzahl sind Anzahl Forumposts + Anzahl Abstimmungen + die Summe aller Positiven Bewertungen(Likes) auf alle Posts:


SQL:
SELECT COUNT( * ) + sum(likes) AS punkte, userID
FROM (
SELECT id AS forumpostid, userID, up AS likes, NULL AS abstimmung_id
FROM pun_posts
UNION ALL 
SELECT NULL , userID, NULL , id AS abstimmung_id
FROM abstimmungen_votes
) AS ERGEBNIS
GROUP BY userID
ORDER BY punkte DESC 
LIMIT 10

Vielen Dank Yaslaw. Wie so oft superschnelle Antwort!
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück