Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Программирование > Базы данных

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 21.11.2004, 22:25
Flesh5 вне форума Посмотреть профиль Отправить личное сообщение для Flesh5 Посетить домашнюю страницу Flesh5 Найти все сообщения от Flesh5
  № 1  
Flesh5

Регистрация: Jun 2002
Сообщений: 226
Отправить сообщение для Flesh5 с помощью ICQ
По умолчанию У меня есть база данных на MySQL ...

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

Старый 22.11.2004, 11:41
mishinaelle вне форума Посмотреть профиль Отправить личное сообщение для mishinaelle Посетить домашнюю страницу mishinaelle Найти все сообщения от mishinaelle
  № 2  
mishinaelle
 
Аватар для mishinaelle

Регистрация: Mar 2003
Адрес: Moscow
Сообщений: 669
Отправить сообщение для mishinaelle с помощью ICQ
что-то в духе
select UserID from Users order by UserBal desc limit 100;

Старый 22.11.2004, 12:19
Flesh5 вне форума Посмотреть профиль Отправить личное сообщение для Flesh5 Посетить домашнюю страницу Flesh5 Найти все сообщения от Flesh5
  № 3  
Flesh5

Регистрация: Jun 2002
Сообщений: 226
Отправить сообщение для Flesh5 с помощью ICQ
Spasibo, eto tochno to chto mne nujno bilo!

Старый 22.11.2004, 18:19
Flesh5 вне форума Посмотреть профиль Отправить личное сообщение для Flesh5 Посетить домашнюю страницу Flesh5 Найти все сообщения от Flesh5
  № 4  
Flesh5

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

Старый 23.11.2004, 12:41
mishinaelle вне форума Посмотреть профиль Отправить личное сообщение для mishinaelle Посетить домашнюю страницу mishinaelle Найти все сообщения от mishinaelle
  № 5  
mishinaelle
 
Аватар для mishinaelle

Регистрация: Mar 2003
Адрес: Moscow
Сообщений: 669
Отправить сообщение для mishinaelle с помощью ICQ
я бы сделала так:
1. сначала делаем выборку, как было описано выше.
2. сливаем все полученные UserID в строку вида id1,id2,id3,...id100
3. делаем запрос: update Users set что_тебе_нужно_сделать where UserID in (строка из п.2);

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

Старый 23.11.2004, 19:56
styx вне форума Посмотреть профиль Отправить личное сообщение для styx Найти все сообщения от styx
  № 6  
styx

Регистрация: Apr 2003
Сообщений: 243
2mishinaelle:
В версии 4 и выше можно без вложенности:
update users set userbal=userbal+1 order by userbal limit 100

Старый 24.11.2004, 11:18
mishinaelle вне форума Посмотреть профиль Отправить личное сообщение для mishinaelle Посетить домашнюю страницу mishinaelle Найти все сообщения от mishinaelle
  № 7  
mishinaelle
 
Аватар для mishinaelle

Регистрация: Mar 2003
Адрес: Moscow
Сообщений: 669
Отправить сообщение для mishinaelle с помощью ICQ
2styx: спасибо, буду знать

Старый 24.11.2004, 11:21
nagash вне форума Посмотреть профиль Отправить личное сообщение для nagash Посетить домашнюю страницу nagash Найти все сообщения от nagash
  № 8  
nagash
Ветеран форума
 
Аватар для nagash

Регистрация: Jul 2001
Адрес: Москва
Сообщений: 3,088
Отправить сообщение для nagash с помощью ICQ
Цитата:
Оригинал написал(а) styx
2mishinaelle:
В версии 4 и выше можно без вложенности:
update users set userbal=userbal+1 order by userbal limit 100
это можно было делать и в третьей версии мюскла...

Старый 24.11.2004, 11:25
mishinaelle вне форума Посмотреть профиль Отправить личное сообщение для mishinaelle Посетить домашнюю страницу mishinaelle Найти все сообщения от mishinaelle
  № 9  
mishinaelle
 
Аватар для mishinaelle

Регистрация: Mar 2003
Адрес: Moscow
Сообщений: 669
Отправить сообщение для mishinaelle с помощью ICQ
ну не кидайте в меня тухлыми помидорами ))

Старый 24.11.2004, 11:44
Flesh5 вне форума Посмотреть профиль Отправить личное сообщение для Flesh5 Посетить домашнюю страницу Flesh5 Найти все сообщения от Flesh5
  № 10  
Flesh5

Регистрация: Jun 2002
Сообщений: 226
Отправить сообщение для Flesh5 с помощью ICQ
Цитата:
я бы сделала так:
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
Очень удобно, в будущем так и буду делать. (сейчас лень переделывать, тем более что от этого почти не изменится скорость выполнения скрипта). Замечу решение действительно профессиональное.

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


Последний раз редактировалось Flesh5; 24.11.2004 в 11:46.
Создать новую тему   Часовой пояс GMT +4, время: 22:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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