Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem SELECT
Forum PHP.pl > Forum > Bazy danych > MySQL
PKua
Cześć. Gdy wykonuję zapytanie:
  1. SELECT `users`.`uid` AS `uid` , `login` , `reg_timestamp` , `rank` , `server_respect` , `forum_respect` , `last_visit_timestamp` , `accsongs` , `rejsongs` , `waitsongs`
  2. FROM `users`
  3. LEFT JOIN (
  4.  
  5. SELECT IFNULL (COUNT( * ), 0) 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 IFNULL (COUNT( * ), 0) 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 IFNULL (COUNT( * ), 0) AS `rejsongs` , `uid`
  20. FROM `songs`
  21. WHERE `status` =2
  22. GROUP BY `uid`
  23. ) AS `rejsongs` ON `rejsongs`.`uid` = `users`.`uid`
  24. WHERE (
  25. `waitsongs` + `accsongs` + `rejsongs`
  26. ) > 0
  27. ORDER BY `reg_timestamp` DESC
  28. LIMIT 0 , 30


to nie zwraca nic, natomiast jak wykonuję:
  1. SELECT `users`.`uid` AS `uid` , `login` , `reg_timestamp` , `rank` , `server_respect` , `forum_respect` , `last_visit_timestamp` , `accsongs` , `rejsongs` , `waitsongs`
  2. FROM `users`
  3. LEFT JOIN (
  4.  
  5. SELECT IFNULL (COUNT( * ), 0) 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 IFNULL (COUNT( * ), 0) 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 IFNULL (COUNT( * ), 0) AS `rejsongs` , `uid`
  20. FROM `songs`
  21. WHERE `status` =2
  22. GROUP BY `uid`
  23. ) AS `rejsongs` ON `rejsongs`.`uid` = `users`.`uid`
  24. WHERE
  25. `waitsongs` > 0
  26. ORDER BY `reg_timestamp` DESC
  27. LIMIT 0 , 30


to zwraca to co trzeba. Dlaczego tak się dzieje? W klauzuli WHERE nie można stosować rzeczy typu coś + coś + coś > czegoś?
bww
Można, tylko trzeba pamiętać ze null to nie 0, a przypuszczam, że to jest powodem. Spróbuj wykonać to samo używając funkcji nvl, nvl(wartosc,0)+nvl...
PKua
Rzeczywiście, jeśli wszystkie zgrupowania są różne od 0 to jest w porządku. Ale używam IFNULL, nie powinno to załatwiać sprawy?

//edit: Moment, przecież jak COUNT nie znajdzie żadnych pasujących rzędów to zwraca pusty wynik facepalmxd.gif. OK, ale ja jestem głupi haha.gif. Dobra, chyba już działa, thx
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.