Pobranie danych z jednej tabeli plus liczby wystąpień z drugiej

0

Cześć, mam takie zapytanie:

SELECT 
         pc.id_photo_category,
         pc.name,
         pc.created_at
         , count(pc.id_photo_category) as photo_count
         FROM photo_category pc
         LEFT JOIN photo_has_photo_category AS phpc
        ON pc.id_photo_category = phpc.id_photo_category 
        WHERE pc.id_photo_category = phpc.id_photo_category 
        GROUP BY pc.id_photo_category

które zwraca wyniki tylko, jeżeli dla danego pc.id_photo_category są wpisy w tabeli photo_has_photo_category. Jak zmodyfikować zapytanie, żeby zwracane były wszystkie wpisy z photo_category, a w miejscu tego counta było po prostu 0 gdy nie ma żadnych wpisów w photo_has_photo_category?

Z góry dzięki :)

0

Nie znam za bardzo mysql ani nie mam jak sprawdzić ale powinno zadziałać tak:

SELECT 
         pc.id_photo_category,
         pc.name,
         pc.created_at
         , COUNT(phpc.id_photo_category) AS photo_count
         FROM photo_category pc
         LEFT JOIN photo_has_photo_category AS phpc
        ON pc.id_photo_category = phpc.id_photo_category 
        --WHERE pc.id_photo_category = phpc.id_photo_category 
        GROUP BY pc.id_photo_category

lub podzapytaniem:

SELECT 
         pc.id_photo_category,
         pc.name,
         pc.created_at
         , (SELECT COUNT(phpc.id_photo_category) FROM photo_has_photo_category AS phpc WHERE phpc.id_photo_category = pc.id_photo_category ) AS photo_count
         FROM photo_category pc
0

Możesz użyćfunkcji SUM do policZenia rekordów:

SELECT 
         pc.id_photo_category,
         pc.name,
         pc.created_at
         , SUM(CASE WHEN phpc.id_photo_category is null THEN 0 ELSE 1 END CASE) AS photo_count
FROM 
    photo_category pc
    LEFT JOIN photo_has_photo_category AS phpc ON pc.id_photo_category = phpc.id_photo_category 
GROUP BY
         pc.id_photo_category,
         pc.name,
         pc.created_at
</CODE>

1 użytkowników online, w tym zalogowanych: 0, gości: 1