Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18

Двойная выборка из базы - как сделать "Лучшее по рейтингу"

01.06.2011, 20:00. Показов 2292. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подксажите плз. Пробую сделать что-то вроде 'Лучшее по рейтингу'.
В таблице записаны id наименования, и его оценка. причем при оценивании добавляется просто новое поле с id и рейтингом (т.е. могут присутствовать 2 id, с разными рейтингами)
Есть такая вот выборка из базы.
По-идее должна выводить 10 лучших наименований.
т.е. 1-я выборка - выбирается наименование, если это наименование встречается больше остальных (count).
далее выбирается из выбранных наименований лучшие по рейтингу, если рейтинг более 4.75, сортируется по рейтингу, и выбирается 10 штук.
НО. 1. по рейтингу почему-то не сортируется, а сортируется по COUNT(mid). 2. (основное) выводятся все значения выбранные в 1-й выборке, а не 10, как описано во 2-й. Спрашивается почему...

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$_query = 'SELECT mid, COUNT(mid) AS middd FROM videoplus GROUP by mid ORDER by middd DESC ';
$_result = mysql_query ($_query) or die ('Query failed : ' . mysql_error ());
$NUM1 = mysql_num_rows ($_result);
 
while ($_line = mysql_fetch_array ($_result, MYSQL_ASSOC))
{
 
 $query = 'SELECT mid, AVG(rating) AS rating FROM videoplus WHERE mid='$_line[mid]' GROUP by mid HAVING rating > 4.75 ORDER BY rating DESC LIMIT 10';
 $result = mysql_query ($query) or die ('Query failed : ' . mysql_error ());
 
  while ($line = mysql_fetch_array ($result, MYSQL_ASSOC))
  {
 
   $toprating .= '<tr><td bgcolor='$tbl_cntr_bg_col'><a href='/index.php?id=$_line[mid]' class='sl'>$line[mid]</a></td>
   <td width='30' class='small' align='right' bgcolor='$tbl_btm_bg_col'>$line[rating]</td></tr>';
  }
 }
спасибо за внимание.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2011, 20:00
Ответы с готовыми решениями:

Выборка из таблици товаров по самому максимальному рейтингу магазина, рейтинг мазаницов если есть одиноковые, выборка уже по минимальной цене
Всем привет, нужна помошь. Имеется следующая таблица товаров Таблица: products её колонки products_id - идентификатор...

Как сделать вывод постов по рейтингу?
Как сделать, чтобы любой авторизованный пользователь мог ставить рейтинг посту? И на на основе рейтинга выводить посты на главной?

Как из такой бд сделать вывод по рейтингу
Всем привет. Есть один вопрос который мне не дает спокойствия) Как вывести из такой бд как на скрине ссылку приложил по рейтингу из бд ...

18
1 / 1 / 5
Регистрация: 25.04.2010
Сообщений: 121
01.06.2011, 23:51
Попробуй так:
SQL
1
2
3
4
5
6
SELECT mid, avg(rating) AS rating
FROM videoplus
GROUP BY mid 
HAVING avg(rating) > 2.5 
ORDER BY 2 DESC 
LIMIT 10
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
02.06.2011, 15:40  [ТС]
не помогло
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
02.06.2011, 16:44
Может так попробовать?

SQL
1
2
3
4
5
6
7
SELECT mid, midd, rating
FROM (SELECT mid, COUNT(mid) AS midd, AVG(rating) AS rating
FROM videoplus
GROUP BY mid
ORDER BY midd DESC LIMIT 10)
AS temp_table
ORDER BY rating DESC
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
02.06.2011, 17:20
Ну ест-но надо добавить
HAVING rating > 4.75
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
02.06.2011, 18:23
Ну там соот-но надо добавить HAVING rating>4.5
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
02.06.2011, 18:23
Ну там соот-но надо добавить HAVING rating>4.5
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
02.06.2011, 18:30  [ТС]
спасибо большое. помню что можно select в select'e но как не знал.
вообщем после небольшой рихтовки получилось то что надо:

PHP
1
$query = 'SELECT mid, middd, ratinggg FROM (SELECT mid, COUNT(mid) AS middd, AVG(rating) AS ratinggg FROM videoplus GROUP BY mid HAVING ratinggg > 4.75 ORDER BY middd DESC LIMIT 15) AS temp_table ';
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
02.06.2011, 18:36
А я тут оказывается наплодил )))
Млин, IE завись просто, сорри ))
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
02.06.2011, 18:50  [ТС]
а такой прикол поддерживается начиная с какой версии мускулы?
на 3.23.54 что-то так не проходит, а на новом Денвере идет...
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
02.06.2011, 19:09  [ТС]
пишет:
Query failed : You have an error in your SQL syntax near 'SELECT mid, COUNT(mid) AS middd, AVG(rating) AS ratinggg FROM videoplus GROUP BY' at line 1
0
1 / 1 / 5
Регистрация: 25.04.2010
Сообщений: 121
03.06.2011, 01:52
мускл не поддерживает встроеных подзапросов
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
03.06.2011, 17:01  [ТС]
хм. как тогда это дело обойти?
0
1 / 1 / 5
Регистрация: 25.04.2010
Сообщений: 121
03.06.2011, 18:39
А разве если сделать так, как ниже, не то получается?
PHP
1
2
3
4
5
6
7
8
9
$query = 'select mid, avg(rating) as rating from videoplus group by mid having avg(rating) > 2.5 order by 2 desc limit 10';
 $result = mysql_query ($query) or die ('Query failed : ' . mysql_error ());
 while ($line = mysql_fetch_array ($result, MYSQL_ASSOC)) {
  $C++;
  $toprating .= '<tr><td bgcolor='$tbl_cntr_bg_col'><a href='/index.php?id=$line[mid]' class='sl'>$C</a></td>  <td width='30' class='small' align='right' bgcolor='$tbl_btm_bg_col'>$line[rating]</td></tr>
';
 }
echo '<table>
$toprating</table>';
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
05.06.2011, 14:58  [ТС]
да. запутали меня как начинающего немного двойными селектами
вот так все везде рабоает:
PHP
1
2
3
4
$query = 'select mid, COUNT(mid) as middd,
avg(rating) as ratinggg from videoplus
group by mid having ratinggg > 4.5
order by middd desc limit 10';
всем большое спасибо за помощь
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
05.06.2011, 15:44
>т.е. 1-я выборка - выбирается наименование, если это наименование
>встречается больше остальных (count).
>далее выбирается из выбранных наименований лучшие по рейтингу, если
>рейтинг более 4.75, сортируется по рейтингу, и выбирается 10 штук.
>$query = 'select mid, COUNT(mid) as middd,avg(rating) as ratinggg
>from videoplusgroup by mid having ratinggg > 4.5order by middd desc limit 10';

Сам ты всех запутал.
Ты хочешь сортировать по рейтингу или по количеству голосов?
Задача была такая: сначала сделать выборку из базы наибольшими количествами голосов, потом выбрать среди них лучшие по рейтингу и отсортировать
по рейтингу.
Так вот, последний твой запрос выбирает записи с наибольшими голосами
и рейтингом болье 4,5. И сортирует он
по кол-ву голосов, а не по рейтингу.

Ты определись что хочешь!
0
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 18
05.06.2011, 16:03  [ТС]
да. последний вариант получился немного не так как планировалось ранее. но ничего лучшего не было придумано...
в принципе и такой вариант уже подходит, но все-таки интересно как сделать то что планировалось.
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
05.06.2011, 16:20
SELECT FROM (SELECT ...
Или попробуй извратиться JOIN'ом
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
05.06.2011, 16:21
>в принципе и такой вариант уже подходит
Для настоящего рейтинга, этот подход неправ.
Сугубо личное мнение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2011, 16:21
Помогаю со студенческими работами здесь

Как сделать сортировку по рейтингу только в поиске?
Тоесть по всему сайту выводится стандартно по дате и только в результатах поиска по рейтингу

Двойная выборка
Есть две таблицы, comments и img Нужно выбрать из img где author = $friendddd, затем выбрать из comments где img_id = id из первой...

Выборка из базы и сделать ссылку по выбранным данным
Доброго времени суток. На главной странице (index.php) сайта есть таблица с данными. Слева есть грубо говоря &quot;панель сортировки&quot;....

Двойная выборка из одной таблицы
есть одна таблица много столбиков нужно сделать две выборки выборка1: столбец10=значение1 выборка2: столбец10=значение2 ...

Двойная выборка из одной таблицы
помогите пожалуйста всю голову сломал уже. Делал процедуру и завис в одном месте но в кратце - в процедуре есть перменая : proc которая в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru