Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc przy JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
PKua
Elo. Mam tabelkę z użytkownikami i dodanymi przez nich piosenkami. Chciałbym teraz w zapytaniu, oprócz danych z tabelki, pobrać liczbę dodanych przez każdego piosenek. Udało mi się dojść do takiego zapytania:
  1. SELECT * FROM users JOIN (SELECT COUNT(*) AS addedsongs, uid FROM songs GROUP BY uid) AS addedsongs ON addedsongs.uid = users.uid


Jednak jeśli ktoś nie dodał żadnej piosenki, w ogóle nie jest wyświetlany. Jak zrobić, żeby wtedy addedsongs było równe 0, ale żeby był pobierany wiersz z tym użytkownikiem?
nospor
Nie: JOIN
a: LEFT JOIN
PKua
Robiłem tak wcześniej, ale byłem ślepy tongue.gif. A dałoby się zrobić, żeby zamiast NULL było 0?
nospor
A w czym ci te null przeszkadza?
Jesli jednak ci przeszkadza to
manual mysql -> IFNULL
PKua
Jak w MySQL jest null to w PHP zmienna przypadkiem też takiej wartości nie przyjmuje? Przecież echo NULL; nic nie wyświetli wink.gif

Wyskrobałem takie coś:
  1. SELECT IFNULL( addedsongs, 0 ) AS addedsongs
  2. FROM users
  3. LEFT JOIN (
  4. SELECT COUNT( * ) AS addedsongs, uid
  5. FROM songs
  6. GROUP BY uid
  7. ) AS addedsongs ON addedsongs.uid = users.uid

i jest OK.

A jakbym chciał zliczyć jeszcze piosenki zaakceptowane, odrzucone i oczekujące na akceptację to muszę robić:
  1. SELECT IFNULL( waitsongs, 0 ) AS waitsongs, IFNULL( accsongs, 0 ) AS accsongs, IFNULL( rejsongs, 0 ) AS rejsongs
  2. FROM users
  3. LEFT JOIN (
  4.  
  5. SELECT COUNT( * ) AS waitsongs, uid
  6. FROM songs
  7. WHERE STATUS =0
  8. GROUP BY uid
  9. ) AS waitsongs ON waitsongs.uid = users.uid
  10. LEFT JOIN (
  11.  
  12. SELECT COUNT( * ) AS accsongs, uid
  13. FROM songs
  14. WHERE STATUS =1
  15. GROUP BY uid
  16. ) AS accsongs ON accsongs.uid = users.uid
  17. LEFT JOIN (
  18.  
  19. SELECT COUNT( * ) AS rejsongs, uid
  20. FROM songs
  21. WHERE STATUS =2
  22. GROUP BY uid
  23. ) AS rejsongs ON rejsongs.uid = users.uid


czy jest jakiś lepszy sposób?
nospor
Cytat
Jak w MySQL jest null to w PHP zmienna przypadkiem też takiej wartości nie przyjmuje? Przecież echo NULL; nic nie wyświetli
Wystarczy w php zrzutować na INT i będzie 0 wink.gif
PKua
W sumie racja, ale wolę, aby MySQL odwaliło czarną robotę wink.gif. Nie spowolni to znacznie działania?
nospor
Cytat
Nie spowolni to znacznie działania?
Nie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.