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
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
Falsches Bild. Entschuldigen Sie mich. Korrigiert. – user3364397
Entschuldigung, aber, welches Feld der Tabelle "Punkte" haben die Anzahl der Punkte (oder in welcher Tabelle diese Informationen gespeichert sind)? – Dazak