powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Определение ТОП 5 лучших записей
9 сообщений из 9, страница 1 из 1
Определение ТОП 5 лучших записей
    #33119180
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Народ, хочу выложить в MySQL Cook Room вот такую задачу:

Задача: Требуется определить рейтинг пяти лучших записей в таблице.

Исходные данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
drop table if exists ttt;

create table ttt (
 uid int not null auto_increment,
 uname varchar( 20 ),
 vote int not null default  0 ,
 Primary Key(uid));

insert into ttt 
(uname, vote) 
values 
('Smith',  1 ), ('Joe',  1 ), ('Peter',  4 ), ('Kate',  3 ), ('Mike',  10 ), ('BOSS',  8 ), ('John',  0 );
Если сделать прямо в лоб следующим запросом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select uid, uname "Best users", vote  
from ttt
order by vote desc
limit  5 

-- то получим

   uid  Best users  vote  
------  ----------  ------
      5   Mike             10 
      6   BOSS              8 
      3   Peter             4 
      4   Kate              3 
      1   Smith             1 

Вроде бы все верно, но есть еще один юзер, у которого vote=1
Код: plaintext
1.
2.
3.
4.
5.
6.
select * from ttt where vote= 1 

   uid  uname   vote  
------  ------  ------
      1   Smith         1 
      2   Joe           1 

Как мне кажется, было бы более правильным включить Joe тоже в список ТОП 5 . Т.к., на самом деле, не понятно кто из них "круче".

Есть такой вариант для более корректного нахождения подобных записей:
Код: plaintext
1.
2.
3.
4.
-- создаем временную таблицу
drop table if exists t_1

create temporary table t_1 as select vote from ttt order by vote desc limit  5 

Теперь мы можем определить "лучших" юзеров:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select ttt.*
from ttt join t_1
on t_1.vote=ttt.vote
order by ttt.vote Desc

   uid  uname   vote  
------  ------  ------
      5   Mike         10 
      6   BOSS          8 
      3   Peter         4 
      4   Kate          3 
      1   Smith         1 
      2   Joe           1 

Примечание:
MySQL ManualС версии MySQL 4.0.2 для создания временных таблиц необходимо иметь привилегии CREATE TEMPORARY TABLES.

Вообщем, что вы думаете по этому поводу? Ваши советы, критика, пожелания и т.д. Может быть есть более изящый вариант?
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33119669
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конкретной реализации не предложу. Но вот алгоритм: узнать значение пятой по старшенству записи (ну в смысле очков сколько, или что там тебя), а потом выдернуть записи у которых больше, или равно.
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33119752
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinКонкретной реализации не предложу. Но вот алгоритм: узнать значение пятой по старшенству записи (ну в смысле очков сколько, или что там тебя), а потом выдернуть записи у которых больше, или равно.
Слушай, точно! :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select t_2.*
from ttt t_2
where vote>=(select t_1.vote 
	     from ttt t_1
	     order by vote desc
	     limit  4 , 1 )
order by t_2.vote desc

   uid  uname   vote  
------  ------  ------
      5   Mike         10 
      6   BOSS          8 
      3   Peter         4 
      4   Kate          3 
      1   Smith         1 
      2   Joe           1 
Вроде бы работает корректно...
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33119804
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мускль у тебя 4.1?
Завидую.
Я на работе проект сейчас внедряю. Мускль 4.0.22. Вложенных запросов нет. Утрахался нахрен.
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33119860
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinА мускль у тебя 4.1?
Завидую.
Я на работе проект сейчас внедряю. Мускль 4.0.22. Вложенных запросов нет. Утрахался нахрен.
ага (4.1.8) :)

Мда... тяжеловато конечно...
Немного лирики ... Вообще когда перешел с Оракла на MySQL (хоть и с небольшим опытом), то мне по началу было просто странно как некоторых фичей нету. :)

Щас вроде бы начинаю привыкать.

P.S. Вчера мой "коллега" только узнал, что MySQL наконец-то поддерживает Group By, не говоря уже вложенных селектах :)) Он просто в тройке работает. Представляю как он "трахался"
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33119862
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы... тяжко без подзапросов...

С подзапросами - вот так:
Код: plaintext
select * from players where rating in (select distinct rating from players order by rating desc limit  5 ) order by rating desc
(перейдите на MySQL 4.1 или вообще на PostgreSQL)

Без подзапроса - выполни два селекта, промежуточный результат сохрани в программе:
Код: plaintext
select distinct rating from players order by rating desc limit  5 
Код: plaintext
select * from players where rating in (результаты предыдущего) order by rating desc

По-моему одним запросом это не победить...
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33119912
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин Роман
Сам не юзал. Потому и спрашиваю: а если вместо сохранения в программе использовать пользовательскую переменную?
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33120054
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что отправляем в MySQL Cook Room следующий вариант? :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select t_2.*
from ttt t_2
where vote>=(select t_1.vote 
	     from ttt t_1
	     order by vote desc
	     limit  4 , 1 )
order by t_2.vote desc
...
Рейтинг: 0 / 0
Определение ТОП 5 лучших записей
    #33120395
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отметь что применимо к мусклу 4.1 и старше.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Определение ТОП 5 лучших записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]