Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Топ по полю 
V
    Опции темы
Aliance
Дата 17.11.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Имеем таблицу:
Код

-- 
-- Структура таблицы `members_dungeon_items`
-- 

CREATE TABLE `members_dungeon_items` (
  `member_id` smallint(4) unsigned NOT NULL default '0',
  `item_id` smallint(4) unsigned NOT NULL default '0',
  `quantity` tinyint(3) unsigned NOT NULL default '0'
) TYPE=MyISAM;

-- 
-- Дамп данных таблицы `members_dungeon_items`
-- 

INSERT INTO `members_dungeon_items` (`member_id`, `item_id`, `quantity`) VALUES
(1, 31, 20),
(1, 30, 1),
(9, 31, 1),
(9, 25, 10),
(19, 5, 40),
(20, 2, 1),


Хочу создать топ3 из данной таблицы, по кол-ву предметов (поле `quantity`). Алгоритм таков, имеем юзера, берем все записи с его кол-вом предметов и суммируем их, затем так со всеми юзерами и выводим троих, чья сумма наибольшая. В даннос случае это юзеры с ID 1, 9 и 19.
Вот что должно получиться:
Юзер 19 - 40 штук
Юзер 1 - 21 штука
Юзер 9 - 11 штук

Юзер 20 - 1 штука

Пытался копать в сторону функции MAX() - но, видимо, неправлиьно копал smile
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 17.11.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Код

SELECT member_id,sum(quantity) as some_sum
FROM members_dungeon_items
GROUP BY member_id
ORDER BY some_sum
LIMIT 3

так?
PM MAIL   Вверх
SelenIT
Дата 17.11.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



только ORDER BY some_sum DESC по идее


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Kesh
Дата 17.11.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Код

SELECT * FROM `members_dungeon_items`
WHERE `member_id` in (1, 9, 19)
ORDER BY `quantity` DESC



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 17.11.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



сорри. надо было 
"ORDER BY some_sum DESC"

Добавлено @ 14:45 
Цитата(SelenIT @  17.11.2006,  13:43 Найти цитируемый пост)
только ORDER BY some_sum DESC по идее 

да.. перепутал, спасибо smile
PM MAIL   Вверх
wetlook
Дата 17.11.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



Hi ! Попробуй так:
Код

//цикл по кол-ву юзеров
foreach($user as $u) {

    $sql="select sum(quanity) as Q from members_dungeon_items where member_id=$u";
    $rez=mysql_query($sql);
    $r=mysql_fetch_row($rez);
    $usersQuanity[$u]=$r['Q'];

}
$i=0;
foreach($usersQuanity as $user=>$value) {
   
    if ($value==max($userQuanity && $i != 2) ) {
    
         $top3[$i]=max($userQuanity);
         unset($userQuanity[$u]);
         $i++;
    }
   if($i==3) break;
}



Это сообщение отредактировал(а) wetlook - 17.11.2006, 15:18
PM MAIL   Вверх
Aliance
Дата 17.11.2006, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



skyboy, спасибо за решение!

Kesh и wetlook, число юзеров зарание не известно. Поэтому ваши варианты не подходят.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.