Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Вытащить рейтинг о бзере
Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
Доброго времени суток!
Есть таблицы (архитектура таблиц на скриншоте в приложении):
Вытаскиваю о юзере:
Сколько он в час берет за выполнение задания(per_hour_money),
Имя (name),
Аватарку (ava),
Рейтинг (rating),
Какой отзыв - like (Плохой|Хороший)в отзывах есть 1 и 0. То есть 1 - это положительный отзыв, 0 это плохой.
Когда пишу такой запрос:
SELECT
test_users.per_hour_money,
test_users.`name`,
test_users.ava,
test_users.id,
test_executors.rating,
test_reviews.`like`
FROM
test_users
LEFT OUTER JOIN test_reviews ON test_users.id = test_reviews.from_id_user
LEFT OUTER JOIN test_executors ON test_users.id = test_executors.uid
Все работает, выводит всех юзеров и если есть вытаскивает отзыв. Но когда хочу узнать количество плохого и хороших отзывов методом COUNT в mysql то провал... вытаскивает 1 запись. не могу допетритить логику, что я делаю не так? Подскажите пожалуйста кто проникся.
SELECT
test_users.per_hour_money,
test_users.`name`,
test_users.ava,
test_users.id,
test_executors.rating,
COUNT(CASE
WHEN test_reviews.like = 1 THEN 1
ELSE NULL
END) AS SUKA_1_LIKE,
COUNT(CASE
WHEN test_reviews.like = 0 THEN 0
ELSE NULL
END) AS SUKA_NULL_LIKE
FROM
test_users
LEFT OUTER JOIN test_reviews ON test_users.id = test_reviews.from_id_user
LEFT OUTER JOIN test_executors ON test_users.id = test_executors.uid Прикреплено изображение (Нажмите для увеличения)
----- Никто не вечен, достойно учись.
and_07
Отправлено: 09 Ноября, 2015 - 09:41:12
Гость
Покинул форум
Сообщений всего: 91
Дата рег-ции: Сент. 2012
Помог: 3 раз(а)
trust пишет:
Но когда хочу узнать количество плохого и хороших отзывов методом COUNT
а чем вам SUM не нравится?
Faraon-san
Отправлено: 09 Ноября, 2015 - 09:53:54
Посетитель
Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013
SELECT`test_users`.`per_hour_money`,`test_users`.`name`,`test_users`.`ava`,`test_users`.`id`,`test_executors`.`rating`, COUNT(CASE WHEN `test_reviews`.`like`= 1 THEN 1 ELSE NULL END)AS`SUKA_1_LIKE`, COUNT(CASE WHEN `test_reviews`.`like`= 0 THEN 1 ELSE NULL END)AS`SUKA_NULL_LIKE`FROM`test_reviews`LEFTJOIN`test_users`ON`test_users`.`id`=`test_reviews`.`from_id_user`LEFTJOIN`test_executors`ON`test_executors`.`uid`=`test_reviews`.`from_id_user`GROUPBY`from_id_user`
trust
Отправлено: 09 Ноября, 2015 - 10:40:34
Новичок
Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011
SELECT`test_users`.`per_hour_money`,`test_users`.`name`,`test_users`.`ava`,`test_users`.`id`,`test_executors`.`rating`, COUNT(CASE WHEN `test_reviews`.`like`= 1 THEN 1 ELSE NULL END)AS`SUKA_1_LIKE`, COUNT(CASE WHEN `test_reviews`.`like`= 0 THEN 1 ELSE NULL END)AS`SUKA_NULL_LIKE`FROM`test_reviews`LEFTJOIN`test_users`ON`test_users`.`id`=`test_reviews`.`from_id_user`LEFTJOIN`test_executors`ON`test_executors`.`uid`=`test_reviews`.`from_id_user`GROUPBY`from_id_user`
Но тогда он будет показывать только тех у кого есть отзывы, а мне нужно всех извлечь юзеров, вытащив к ним аватарку имя и количество положительных и отрицательных отзывов. (Добавление)
and_07 пишет:
trust пишет:
Но когда хочу узнать количество плохого и хороших отзывов методом COUNT
а чем вам SUM не нравится?
А в чем будет в моем случае принципиальная разница?
-------------------------------- --- Faraon-san - Спасибо за Group by, упустил совсем=) Запрос ниже будет правильным! Всего доброго Вам Faraon-san!=)
SELECT `test_users`.`per_hour_money`,
`test_users`.`name`,
`test_users`.`ava`,
`test_users`.`id`,
`test_executors`.`rating`,
COUNT(CASE WHEN `test_reviews`.`like` = 1 THEN 1 ELSE NULL END) AS `SUKA_1_LIKE`,
COUNT(CASE WHEN `test_reviews`.`like` = 0 THEN 1 ELSE NULL END) AS `SUKA_NULL_LIKE`
FROM `test_reviews`
RIGHT JOIN `test_users` ON `test_users`.`id` = `test_reviews`.`from_id_user`
LEFT JOIN `test_executors` ON `test_executors`.`uid` = `test_reviews`.`from_id_user` GROUP BY `test_users`.`id`
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.