Vinzenz Mai: mehr als x mal

Beitrag lesen

Hallo

Glaub das ist etwas komplizierter!

aber nur ein wenig.

users:
user_id|name|alter

fotos:
id|user_id|datum

Schließlich gibt es in SELFHTML Aktuell zwei Artikel zu JOINS, die ich Dir
als Lektüre empfehle:

Einführung in Joins
Fortgeschrittene Jointechniken

Ich will jetzt alle namen derjenigen haben, die mehr als 5 fotos haben.

und natürlich auch den Benutzernamen dazu:

Im ersten Schritt lassen wir uns alle Benutzer mit den zugehörigen id-Werten ihrer Bilder anzeigen:

SELECT  
    users.name,  
    fotos.id  
FROM  
    users  
INNER JOIN fotos                  -- die beiden Tabellen sind durch die  
ON users.user_id = fotos.user_id  -- Spalte user_id verknüpft  

Nun zählen wir die Bilder, d.h. wieviele ids jedem Benutzer zugeordnet sind:

SELECT  
    users.name,  
    COUNT(fotos.id) AS Anzahl  
FROM  
    users  
INNER JOIN fotos                  -- die beiden Tabellen sind durch die  
ON users.user_id = fotos.user_id  -- Spalte user_id verknüpft  
GROUP BY users.name               -- Zu jedem Namen gibt es eine Spalte  

Aber: es könnte ja zwei Benutzer mit gleichem Namen geben:

SELECT  
    users.id,  
    users.name,  
    COUNT(fotos.id) AS Anzahl  
FROM  
    users  
INNER JOIN fotos                  -- die beiden Tabellen sind durch die  
ON users.user_id = fotos.user_id  -- Spalte user_id verknüpft  
GROUP BY  
     users.id,                    -- gleichnamige Benutzer an der id  
                                  -- unterscheiden  
     users.name                   -- Zu jedem Namen gibt es eine Spalte  

Nur die mit mehr als fünf Bildern, das erledigt die HAVING-Klausel, siehe
in SELFHTML aktuell Datensätze gruppieren mit SQL:

SELECT  
    users.id,  
    users.name,  
    COUNT(fotos.id) AS Anzahl  
FROM  
    users  
INNER JOIN fotos                  -- die beiden Tabellen sind durch die  
ON users.user_id = fotos.user_id  -- Spalte user_id verknüpft  
GROUP BY  
     users.id,                    -- gleichnamige Benutzer an der id  
                                  -- unterscheiden  
     users.name                   -- Zu jedem Namen gibt es eine Spalte  
HAVING COUNT(fotos.id) > 5        -- nur solche mit mehr als fünf Bildern  

Wie du siehst eine ziemlich schwierige angelegenheit.

Wenn Du Dich damit eine Weile beschäftigst, findest Du heraus, dass das gar
nicht so schwierig ist.

Freundliche Grüße

Vinzenz