2016-04-10 5 views
0

DatabaseHolen Sie die höchste Punktzahl und die Anzahl der Siege

Hier ist meine Datenbank. Jedes Foto hat einige Punkte und wird von bestimmten Benutzern aufgenommen. Jedes Foto ist auch dem Ereignis zugeordnet. Ich möchte für jede Veranstaltung ein Bild mit der höchsten Punktzahl finden. Ich möchte auch zählen, wie viele Ereignisse du gewonnen hast (z. B. für den Benutzer mit id = 10). Kannst du mir bitte Helfen? Ich weiß nicht, wie ich dieses Problem lösen soll.

+0

Ich denke, Sie alle Tabellen nicht brauchen, die Sie gezeigt haben. Es sieht aus wie \ points \ und \ photos \ sind beide Beziehungen zwischen \ 'events \' und \ 'users \'. Es scheint keine direkte Beziehung zwischen \ "Fotos \" und \ "Punkten \" zu geben. – spencer7593

+0

Falsches Bild. Entschuldigen Sie mich. Korrigiert. – user3364397

+0

Entschuldigung, aber, welches Feld der Tabelle "Punkte" haben die Anzahl der Punkte (oder in welcher Tabelle diese Informationen gespeichert sind)? – Dazak

Antwort

0

Hier sind zwei Abfragen zu erreichen, was Sie brauchen:

Bild mit der höchsten Anzahl von Punkten für jedes Ereignis.

SELECT  e.id event_id, 
      e.name event_name, 
      ph.id photo_id, 
      ph.title photo_title, 
      u.id user_id, 
      u.login user_login, 
      COUNT(*) points 
FROM  events e 
INNER JOIN photos ph 
     ON ph.event_id = e.id 
     AND ph.id = (
       SELECT  ph.id 
       FROM  photos ph 
       INNER JOIN points p 
         ON p.photo_id = ph.id 
       WHERE  ph.event_id = e.id 
       GROUP BY ph.id 
       ORDER BY COUNT(*) DESC 
       LIMIT  1 
      ) 
-- optional if you need to know the points    
INNER JOIN points p 
     ON p.photo_id = ph.id 
-- optional if you need to know the owner of the photo 
INNER JOIN users u 
     ON u.id = ph.user_id 
GROUP BY e.id, 
      e.name, 
      ph.id, 
      ph.title 

Siehe SQL fiddle.

zählen, wie viele Ereignisse, die Sie

gewonnen
SELECT  u.id user_id, 
      u.login user_login, 
      COUNT(distinct e.id) events_won 
FROM  events e 
INNER JOIN photos ph 
     ON ph.event_id = e.id 
     AND ph.id = (
       SELECT  ph.id 
       FROM  photos ph 
       INNER JOIN points p 
         ON p.photo_id = ph.id 
       WHERE  ph.event_id = e.id 
       GROUP BY ph.id 
       ORDER BY COUNT(*) DESC 
       LIMIT  1 
      ) 
INNER JOIN users u 
     ON u.id = ph.user_id 
GROUP BY u.id, 
      u.login 

SQL fiddle Siehe

+0

Gern geschehen. – trincot

Verwandte Themen