Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pomoc przy JOIN
PKua
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.04.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie: JOIN
a: LEFT JOIN
Go to the top of the page
+Quote Post
PKua
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.04.2013

Ostrzeżenie: (0%)
-----


Robiłem tak wcześniej, ale byłem ślepy (IMG:style_emoticons/default/tongue.gif) . A dałoby się zrobić, żeby zamiast NULL było 0?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A w czym ci te null przeszkadza?
Jesli jednak ci przeszkadza to
manual mysql -> IFNULL
Go to the top of the page
+Quote Post
PKua
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.04.2013

Ostrzeżenie: (0%)
-----


Jak w MySQL jest null to w PHP zmienna przypadkiem też takiej wartości nie przyjmuje? Przecież echo NULL; nic nie wyświetli (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
PKua
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.04.2013

Ostrzeżenie: (0%)
-----


W sumie racja, ale wolę, aby MySQL odwaliło czarną robotę (IMG:style_emoticons/default/wink.gif) . Nie spowolni to znacznie działania?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nie spowolni to znacznie działania?
Nie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 01:16