Ich brauche mal kurz Starthilfe weil ich gerade irgendwie schwammig im Kopf bin. Nehmen wir mal an ich habe eine Tabelle welche Up/Downvotes zu, greifen wir das jetzt einfach mal aus der Luft und sagen "Benutzer", hat. Also die Tabelle hat drei Spalten:
1. Ziel-Benutzer-ID
2. Quell-Benutzer-ID
3. Typ (UP/DOWN)
Wenn ich jetzt herausfinden will wieviele Up/Downvotes ein Benutzer hat geht das relativ simpel:
Das gibt mir zwei Zeilen mit den jeweiligen Votes fuer rauf/runter. Jetzt will ich das ganze aber etwas komplexer gestalten, und zwar will ich anhand des aktuellen Benutzers die Votes in drei Gruppen aufteilen, Neutral, Vertrauenswuerdig, Misstraut. Dies basiert darauf ob der aktuelle Benutzer, also derjenige welcher die Anfrage stellt, auf die Benutzer gevotet hat welche Votes zum Ziel-Benutzer abgegeben haben. Ein Beispiel, wir haben den Benutzer "Zielwasser" dessen Daten so aussehen:
So, jetzt habe ich auf zwei dieser Benutzer ebenfalls gevotet, also die gesamte Tabelle sieht so aus:
Und jetzt haette ich gerne dass ich fuer "Zielwasser" folgende Aufstellung bekomme basierend darauf wie ich die votenden Benutzer bewertet habe:
Das klingt fuer mich nach einem recht einfachen Self-Join:
Aber da habert es bereits ein wenig bei mir im Kopf. Weil dann muesste ich das Join bereits auf den abfragenden Benutzer einschraenken. Am liebsten waere mir wenn ich das in einer View loesen koennte die ich dann Abfrage mit einer einfachen Bedingung, aber ich werde das Gefuehl nicht los dass das doch zu komplex dafuer ist.
Hat da jemand eine Idee?
1. Ziel-Benutzer-ID
2. Quell-Benutzer-ID
3. Typ (UP/DOWN)
Wenn ich jetzt herausfinden will wieviele Up/Downvotes ein Benutzer hat geht das relativ simpel:
SQL:
select
count(*) as COUNT,
TYPE,
from
VOTES
where
TARGET_USER_ID = 70879
group by
TYPE;
Das gibt mir zwei Zeilen mit den jeweiligen Votes fuer rauf/runter. Jetzt will ich das ganze aber etwas komplexer gestalten, und zwar will ich anhand des aktuellen Benutzers die Votes in drei Gruppen aufteilen, Neutral, Vertrauenswuerdig, Misstraut. Dies basiert darauf ob der aktuelle Benutzer, also derjenige welcher die Anfrage stellt, auf die Benutzer gevotet hat welche Votes zum Ziel-Benutzer abgegeben haben. Ein Beispiel, wir haben den Benutzer "Zielwasser" dessen Daten so aussehen:
Code:
TARGET_USER_ID | SOURCE_USER_ID | Typ |
----------------|----------------|------|
Zielwasser | HeiniX | UP |
Zielwasser | HerrY | DOWN |
Zielwasser | FrauZ | UP |
So, jetzt habe ich auf zwei dieser Benutzer ebenfalls gevotet, also die gesamte Tabelle sieht so aus:
Code:
TARGET_USER_ID | SOURCE_USER_ID | Typ |
----------------|----------------|------|
Zielwasser | HeiniX | UP |
Zielwasser | HerrY | DOWN |
Zielwasser | FrauZ | UP |
HeiniX | Ich | UP |
HerrY | Ich | DOWN |
Und jetzt haette ich gerne dass ich fuer "Zielwasser" folgende Aufstellung bekomme basierend darauf wie ich die votenden Benutzer bewertet habe:
Code:
Neutral Up: 1
Neutral Down: 0
Vetraut Up: 1
Vertraut Down: 0
Misstraut Up: 0
Misstraut Down: 1
Das klingt fuer mich nach einem recht einfachen Self-Join:
Code:
TARGET_USER_ID | SOURCE_USER_ID | Typ | ICH_VOTE_TYP |
----------------|----------------|------|--------------|
Zielwasser | HeiniX | UP | UP |
Zielwasser | HerrY | DOWN | DOWN |
Zielwasser | FrauZ | UP | null |
Aber da habert es bereits ein wenig bei mir im Kopf. Weil dann muesste ich das Join bereits auf den abfragenden Benutzer einschraenken. Am liebsten waere mir wenn ich das in einer View loesen koennte die ich dann Abfrage mit einer einfachen Bedingung, aber ich werde das Gefuehl nicht los dass das doch zu komplex dafuer ist.
Hat da jemand eine Idee?