Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Базы данных (http://www.flasher.ru/forum/forumdisplay.php?f=22)
-   -   У меня есть база данных на MySQL ... (http://www.flasher.ru/forum/showthread.php?t=65099)

Flesh5 21.11.2004 22:25

У меня есть база данных на MySQL ...
 
Здравствуйте,
У меня есть база данных на MySQL, с несколькими таблицами. Одна таблица содержит около 500 записей, с информацией о статистке пользователей. Моя задача выбрать 100 пользователей с наивысшим балом (значение балла находится в диапазоне 0-100), если у нескольких пользователей один и тот же бал не имеет значения который я выберу.
Проблема заключается в следующем: как можно выбрать 100 пользователей, и это решение должно быть простым. Стандартное решение типа помещение всех значений в массив, и потом выбор лучших 100 пользователей не подходит по той причине что, надо загружать информацию о 500 пользователей а это нагрузка на сервер.
Спасибо за помощь

mishinaelle 22.11.2004 11:41

что-то в духе
select UserID from Users order by UserBal desc limit 100;

Flesh5 22.11.2004 12:19

Spasibo, eto tochno to chto mne nujno bilo!

Flesh5 22.11.2004 18:19

А что посоветуете если мне нужно этим лучшим сто пользователям увеличить рейтинг, например на 1.
update UserID здесь что-то from Users order by UserBal desc limit 100;
Спасибо за помощь

mishinaelle 23.11.2004 12:41

я бы сделала так:
1. сначала делаем выборку, как было описано выше.
2. сливаем все полученные UserID в строку вида id1,id2,id3,...id100
3. делаем запрос: update Users set что_тебе_нужно_сделать where UserID in (строка из п.2);

просто моя версия MySQL не дает использовать вложенные подзапросы. и я не помню: какая-нить последняя версия дает это делать? если да - можно одним запросом сделать

styx 23.11.2004 19:56

2mishinaelle:
В версии 4 и выше можно без вложенности:
update users set userbal=userbal+1 order by userbal limit 100

mishinaelle 24.11.2004 11:18

2styx: спасибо, буду знать

nagash 24.11.2004 11:21

Цитата:

Оригинал написал(а) styx
2mishinaelle:
В версии 4 и выше можно без вложенности:
update users set userbal=userbal+1 order by userbal limit 100

это можно было делать и в третьей версии мюскла...

mishinaelle 24.11.2004 11:25

ну не кидайте в меня тухлыми помидорами :)))

Flesh5 24.11.2004 11:44

Цитата:

я бы сделала так:
1. сначала делаем выборку, как было описано выше.
2. сливаем все полученные UserID в строку вида id1,id2,id3,...id100
3. делаем запрос: update Users set что_тебе_нужно_сделать where UserID in (строка из п.2);

просто моя версия MySQL не дает использовать вложенные подзапросы. и я не помню: какая-нить последняя версия дает это делать? если да - можно одним запросом сделать
Интересно то что я тоже так решил задачу! :-)

Цитата:

В версии 4 и выше можно без вложенности:
update users set userbal=userbal+1 order by userbal limit 100
Очень удобно, в будущем так и буду делать. (сейчас лень переделывать, тем более что от этого почти не изменится скорость выполнения скрипта). Замечу решение действительно профессиональное.

Всем большое спасибо, проблему решил, скрипт написал, вот только не выспался, всю ночь на сайте скрипт отлаживал. :-)


Часовой пояс GMT +4, время: 01:19.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.