Добрый вечер. Хотя нет. Когда в городе разрываются снаряды, он совсем не добрый. Ну да ладно...
Пытаюсь создать скрипт который выведет количество оценок от 1 до 10 с результатами голосов каждой.
Т.е.
Оценка 10 - 5 пользователей.
Оценка 9 - 0 пользователей.
Оценка 8 - 4 пользователей.
и т.д.
Потратил сутки на казалось-бы простой вопрос но....
PHP код:Результат никак не могу получить. Прошу помощи профессионалов.
$query = "SELECT COUNT(*) as count_rate,rating FROM " . "$config_ccms_prefix" . "game_rate WHERE w_id=\"$gameid\"";
$r = mysql_query($query) or die($query." : ".mysql_error());
$result = mysql_fetch_array($r);
$rate_sum = 0;
$rate_count = 0;
$rate_statis = array(10=>0,9=>0,8=>0,7=>0,6=>0,5=>0,4=>0,3=>0,2=>0,1=>0);
for($i = 0; $i < 10; $i ++) {
if (isset ( $result [$i] )) {
$rate_sum += $result [$i]->count_rate * $result [$i]->rating;
$rate_count += $result [$i]->count_rate;
$rate_statis [intval ( $result [$i]->rating )] = $result [$i]->rating;
}
}
$rate_avg = $rate_count == 0 ? 0 : $rate_sum / $rate_count;
$data_star = array ();
foreach ( $rate_statis as $k => $v ) {
$data_star [] = "{$k}=" . number_format ( $v, 0, '.', '.' ) . "";
}
var_dump($data_star);
- 14.09.2014 22:12
- 15.09.2014 01:24
Появились сдвиги...
PHP код:Код начал выводить существующие оценки.$query = "SELECT rating, COUNT(*) AS votes
FROM " . "$config_ccms_prefix" . "game_rate WHERE w_id=\"$gameid\" GROUP BY rating ORDER BY rating DESC";
$result = mysql_query($query) or die($query." : ".mysql_error());
while($row = mysql_fetch_assoc($result))
{
$ratings_detail .= "".$row['rating']." (votes ".$row['votes'].")". "<hr>";
}
т.е. если существует запись в бд оценки 10,9,5...
Но как заставить выполнить перебор значений от 0 до 10 хз. - 15.09.2014 10:50
- Регистрация: 10.07.2011
- Сообщений: 149
- Репутация: 23
Вроде надо что-то типа count (rating) без группировки
- 15.09.2014 12:27
mln141, пробовал не то. Думаю что смотреть надо в сторону for чтобы проходил все значения, но реализовать с моим уровнем знаний не получается.
- 15.09.2014 17:12Привет, waterfly Кто не сдается, тот побеждает. ) Показал пост боссу. Шеф сказал: Помочь! Уже дали задачку нашим программистам. Это тяжелая артиллерия. Минут 10-15 подождите. Сейчас разберутся с вашим кодом.Добрый вечер. Хотя нет. Когда в городе разрываются снаряды, он совсем не добрый. Ну да ладно...
---------- Сообщение добавлено 15:48 ---------- Предыдущее 15:38 ----------
Пробуйте.
1-й вариант. Использовать заранее созданный массив с нулями по всем голосам.PHP код:2-й вариант. Создать временную таблицу в запросе.$query = "SELECT rating, COUNT(rating) AS votes FROM ".$config_ccms_prefix."game_rate WHERE w_id=".$gameid." GROUP BY rating";
$result = mysql_query($query);
$array = array_fill(1, 10, 0);
while($row = mysql_fetch_assoc($result)) {
$array[(int)$row['rating']] = $row['votes'];
}
$ratings_detail = "";
for ($i = 1; $i <= 10; $i ++) {
$ratings_detail .= $i." (votes ".$array[$i].")<hr>";
}
PHP код:3-й вариант. Использовать не временную таблицу, а постоянную.$query = "SELECT tmp.rating, count(gr.rating) AS votes FROM
(SELECT 1 AS rating
UNION SELECT 2
UNION SELECT 3
UNION SELECT 4
UNION SELECT 5
UNION SELECT 6
UNION SELECT 7
UNION SELECT 8
UNION SELECT 9
UNION SELECT 10) AS tmp
LEFT JOIN ".$config_ccms_prefix."game_rate AS gr
ON gr.rating=tmp.rating
WHERE gr.w_id=".$gameid."
GROUP BY tmp.rating";
$result = mysql_query($query);
$ratings_detail = "";
while($row = mysql_fetch_assoc($result)) {
$ratings_detail .= $row['rating']." (votes ".$row['votes'].")<hr>";
}
---------- Сообщение добавлено 16:12 ---------- Предыдущее 15:48 ----------
Вдогонку
Там суть в том что у него в БД нет значений, и группируя результат SQL, запросе он считывает только то что у него там есть. А если рейтинга вообще нет, даже нет значения 0, то он из БД не выведет список от 0-10
[16:08:33] Артём: Поэтому надо создавать виртуально в памяти список от 0-10Спасибо сказали:
waterfly(15.09.2014), - 15.09.2014 17:17
ekart, спасибо. Под утро уже психонул и сделал по одному запросу для каждой оценки. На конкурсе говнокода я бы занял первое место)) Начинаю пробовать Ваши варианты.
Спасибо сказали:
ekart(15.09.2014), - 15.09.2014 17:27
Всё получится )
Тэги топика:
Похожие темы
Темы | Раздел | Ответов | Последний пост |
---|---|---|---|
Рейтинг | 3 | 24.06.2013 02:38 | |
Рейтинг в DLE | DLE | 8 | 09.06.2013 16:26 |
Рейтинг пользователей в Community Builder | Joomla | 0 | 03.06.2012 05:01 |
Русский рейтинг пользователей Twitter - iFollow.ru | Реклама партнерских программ | 10 | 24.06.2011 23:24 |