Cześć. Gdy wykonuję zapytanie:
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ś?