SELECT `users`.`uid` AS `uid` , `login` , `reg_timestamp` , `rank` , `server_respect` , `forum_respect` , `last_visit_timestamp` , `accsongs` , `rejsongs` , `waitsongs` FROM `users` LEFT JOIN ( SELECT IFNULL (COUNT( * ), 0) AS `waitsongs` , `uid` FROM `songs` WHERE `status` =0 GROUP BY `uid` ) AS `waitsongs` ON `waitsongs`.`uid` = `users`.`uid` LEFT JOIN ( SELECT IFNULL (COUNT( * ), 0) AS `accsongs` , `uid` FROM `songs` WHERE `status` =1 GROUP BY `uid` ) AS `accsongs` ON `accsongs`.`uid` = `users`.`uid` LEFT JOIN ( SELECT IFNULL (COUNT( * ), 0) AS `rejsongs` , `uid` FROM `songs` WHERE `status` =2 GROUP BY `uid` ) AS `rejsongs` ON `rejsongs`.`uid` = `users`.`uid` WHERE ( `waitsongs` + `accsongs` + `rejsongs` ) > 0 ORDER BY `reg_timestamp` DESC LIMIT 0 , 30
to nie zwraca nic, natomiast jak wykonuję:
SELECT `users`.`uid` AS `uid` , `login` , `reg_timestamp` , `rank` , `server_respect` , `forum_respect` , `last_visit_timestamp` , `accsongs` , `rejsongs` , `waitsongs` FROM `users` LEFT JOIN ( SELECT IFNULL (COUNT( * ), 0) AS `waitsongs` , `uid` FROM `songs` WHERE `status` =0 GROUP BY `uid` ) AS `waitsongs` ON `waitsongs`.`uid` = `users`.`uid` LEFT JOIN ( SELECT IFNULL (COUNT( * ), 0) AS `accsongs` , `uid` FROM `songs` WHERE `status` =1 GROUP BY `uid` ) AS `accsongs` ON `accsongs`.`uid` = `users`.`uid` LEFT JOIN ( SELECT IFNULL (COUNT( * ), 0) AS `rejsongs` , `uid` FROM `songs` WHERE `status` =2 GROUP BY `uid` ) AS `rejsongs` ON `rejsongs`.`uid` = `users`.`uid` WHERE `waitsongs` > 0 ORDER BY `reg_timestamp` DESC 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ś?