Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pomoc przy JOIN
PKua
post 4.05.2013, 10:37:51
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 4.05.2013, 10:55:24
Post #2





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




Nie: JOIN
a: LEFT JOIN


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
PKua
post 4.05.2013, 12:56:51
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 tongue.gif. A dałoby się zrobić, żeby zamiast NULL było 0?
Go to the top of the page
+Quote Post
nospor
post 4.05.2013, 12:57:46
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
PKua
post 4.05.2013, 14:42:14
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 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 4.05.2013, 15:11:12
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 wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
PKua
post 5.05.2013, 12:12:25
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ę wink.gif. Nie spowolni to znacznie działania?
Go to the top of the page
+Quote Post
nospor
post 5.05.2013, 12:15:17
Post #8





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




Cytat
Nie spowolni to znacznie działania?
Nie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:52