Mysql LEFT JOIN с count возвращает неизвестный столбец - PullRequest
0 голосов
/ 21 ноября 2018

Уважаемый, у меня есть запрос ниже, чтобы подсчитать, сколько спамов для каждого пользователя и общее количество заказов.

. Я сделал левое соединение, потому что не все заказы имеют спам.

select users.firstName,users.lastName,users.Id,users.phoneNumber,count(CASE 
                            WHEN comments.`commentType` = "spam" THEN 1 ELSE NULL END) as countSpam,
                            count(`orders`.`id`) as totalOrder
                            from `orders`,users,providers
                            LEFT JOIN comments ON `orders`.`id`= `comments`.`commentableId`
                            where
                            `orders`.`providerId` = `providers`.id
                            and
                            users.id = `providers`.userId
                            and
                            `orders`.`createdAt` >= (CURDATE() - INTERVAL 7 DAY)
                            GROUP BY users.id
                            ORDER BY countSpam DESC;

получаетошибка ниже из mysql

Неизвестный столбец 'orders.id' в 'предложении'

В чем здесь проблема?я сделал LEFT JOIN правильно на основе старого запроса, работающего нормально

1 Ответ

0 голосов
/ 23 ноября 2018

я исправил проблему, я думаю, что это была проблема синтаксиса, и новый запрос, который работает как чудо, ниже

select users.firstName,users.lastName,users.phoneNumber,count(CASE
                            WHEN comments.`commentType` = "spam" THEN 1 ELSE NULL END) as spamCounter,
                            ROUND(count(CASE
                  WHEN comments.`commentType` = "spam" THEN 1 ELSE NULL END)/count(orders.id),2) AS ratio_spam,
                            count(orders.id) as totalOrder
                            from users,providers,orders
                            LEFT JOIN comments ON `orders`.`id`= `comments`.`commentableId`
                            where
                            orders.`providerId` = providers.id
                            and
                            users.id = providers.userId
                            and
                            `orders`.`createdAt` >= (CURDATE() - INTERVAL 7 DAY)
                            GROUP BY users.id
                            ORDER BY spamCounter DESC
                            LIMIT 20;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...