Это ваш запрос, отформатированный так (по крайней мере) я могу читать:
SELECT my_users.name, my_users.avatar, my_users.surname, fastmap_projects.*,
(SELECT COUNT(*)
FROM `fastmap_rating`
WHERE `fastmap_rating`.`map_id`=`fastmap_projects`.`id` AND `rate`='1') as `posivote`,
(SELECT COUNT(*)
FROM `fastmap_rating`
WHERE `fastmap_rating`.`map_id`=`fastmap_projects`.`id` AND `rate`='-1') as `negavote`
FROM `fastmap_projects` LEFT JOIN
`my_users`
ON `fastmap_projects`.`user_id`=`my_users`.`id`
WHERE `area_id` = '4' AND (`negavote` BETWEEN -3 AND 3) OR (`posivote` BETWEEN -3 AND 3)
Вы пытаетесь использовать псевдоним столбца в предложении where
и SQL не позволяет этого (это часть стандартного, а не ограничения MySQL). Обычным решением является использование подзапроса или CTE. Однако MySQL имеет расширение. Вы можете использовать пункт having
вместо пункта where
:
SELECT my_users.name, my_users.avatar, my_users.surname, fastmap_projects.*,
(SELECT COUNT(*)
FROM `fastmap_rating`
WHERE `fastmap_rating`.`map_id`=`fastmap_projects`.`id` AND `rate`='1') as `posivote`,
(SELECT COUNT(*)
FROM `fastmap_rating`
WHERE `fastmap_rating`.`map_id`=`fastmap_projects`.`id` AND `rate`='-1') as `negavote`
FROM `fastmap_projects` LEFT JOIN
`my_users`
ON `fastmap_projects`.`user_id`=`my_users`.`id`
HAVING `area_id` = '4' AND (`negavote` BETWEEN -3 AND 3) OR (`posivote` BETWEEN -3 AND 3);
Как примечание: Просто проверить скобки, чтобы быть уверенным, что это то, что вы хотите сделать. Это выберет области, которые не имеют идентификатора 4
. Вы можете это значит:
HAVING `area_id` = '4' AND (`negavote` BETWEEN -3 AND 3 OR `posivote` BETWEEN -3 AND 3);
Благодарю вас за внимание. Теперь у меня проблема. Вы спасли мой день –