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 :: Вытащить рейтинг о бзере

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
trust
Отправлено: 09 Ноября, 2015 - 07:52:34
Post Id



Новичок


Покинул форум
Сообщений всего: 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
Прикреплено изображение (Нажмите для увеличения)
12.png


-----
Никто не вечен, достойно учись.
 
 Top
and_07
Отправлено: 09 Ноября, 2015 - 09:41:12
Post Id


Гость


Покинул форум
Сообщений всего: 91
Дата рег-ции: Сент. 2012  


Помог: 3 раз(а)




trust пишет:
Но когда хочу узнать количество плохого и хороших отзывов методом COUNT



а чем вам SUM не нравится?
 
 Top
Faraon-san
Отправлено: 09 Ноября, 2015 - 09:53:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




Попробуй так:
CODE (SQL):
скопировать код в буфер обмена
  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 1 ELSE NULL END) AS `SUKA_NULL_LIKE` FROM `test_reviews` LEFT 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 `from_id_user`
 
 Top
trust
Отправлено: 09 Ноября, 2015 - 10:40:34
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Faraon-san пишет:
Попробуй так:
CODE (SQL):
скопировать код в буфер обмена
  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 1 ELSE NULL END) AS `SUKA_NULL_LIKE` FROM `test_reviews` LEFT 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 `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`

(Отредактировано автором: 09 Ноября, 2015 - 10:53:47)



-----
Никто не вечен, достойно учись.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB