SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.04.2010 23:35:19

aledain
Участник
Зарегистрирован: 09.04.2010
Сообщений: 4

Прошу помочь с двумя запросами

Добрый день.

Прошу помочь с составлением двух запросов.

Таблицы:

Код:

CREATE TABLE IF NOT EXISTS `xbtit_users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(40) NOT NULL DEFAULT '',
  `password` varchar(40) NOT NULL DEFAULT '',
  `id_level` int(10) NOT NULL DEFAULT '1',
  `random` int(10) DEFAULT '0',
  `email` varchar(50) NOT NULL DEFAULT '',
  `language` tinyint(4) NOT NULL DEFAULT '1',
  `style` tinyint(4) NOT NULL DEFAULT '1',
  `joined` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `lastconnect` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `lip` bigint(11) DEFAULT '0',
  `downloaded` bigint(20) DEFAULT '1073741824',
  `uploaded` bigint(20) DEFAULT '5368709120',
  `avatar` varchar(200) DEFAULT NULL,
  `avatar_upload` enum('yes','no') NOT NULL DEFAULT 'no',
  `avatar_upload_name` varchar(60) NOT NULL,
  `pid` varchar(32) NOT NULL DEFAULT '',
  `flag` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `topicsperpage` tinyint(3) unsigned NOT NULL DEFAULT '15',
  `postsperpage` tinyint(3) unsigned NOT NULL DEFAULT '15',
  `torrentsperpage` tinyint(3) unsigned NOT NULL DEFAULT '15',
  `cip` varchar(15) DEFAULT NULL,
  `time_offset` varchar(4) NOT NULL DEFAULT '0',
  `temp_email` varchar(50) NOT NULL DEFAULT '',
  `smf_fid` int(10) NOT NULL DEFAULT '0',
  `dlrandom` varchar(8) DEFAULT '0',
  `age` int(9) NOT NULL DEFAULT '0',
  `gender` int(9) NOT NULL DEFAULT '2',
  `toptracker_user_votetime` date NOT NULL DEFAULT '0000-00-00',
  `commentpm` enum('true','false') NOT NULL DEFAULT 'true',
  `retrackerstr` enum('0','1') NOT NULL DEFAULT '1',
  `seedbonus` decimal(12,6) NOT NULL DEFAULT '0.000000',
  `admemailsend` enum('true','false') NOT NULL DEFAULT 'true',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  KEY `id_level` (`id_level`),
  KEY `pid` (`pid`),
  KEY `cip` (`cip`),
  KEY `avatar_upload` (`avatar_upload`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16363 ;

CREATE TABLE IF NOT EXISTS `xbtit_files` (
  `info_hash` varchar(40) NOT NULL DEFAULT '',
  `filename` varchar(250) NOT NULL DEFAULT '',
  `url` varchar(250) NOT NULL DEFAULT '',
  `info` varchar(250) NOT NULL DEFAULT '',
  `data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `size` bigint(20) NOT NULL DEFAULT '0',
  `comment` text,
  `category` int(10) unsigned NOT NULL DEFAULT '6',
  `genres` varchar(50) NOT NULL,
  `external` enum('yes','no') NOT NULL DEFAULT 'no',
  `announce_url` varchar(100) NOT NULL DEFAULT '',
  `uploader` int(10) NOT NULL DEFAULT '1',
  `lastupdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `anonymous` enum('true','false') NOT NULL DEFAULT 'false',
  `lastsuccess` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `dlbytes` bigint(20) unsigned NOT NULL DEFAULT '0',
  `seeds` int(10) unsigned NOT NULL DEFAULT '0',
  `leechers` int(10) unsigned NOT NULL DEFAULT '0',
  `finished` int(10) unsigned NOT NULL DEFAULT '0',
  `lastcycle` int(10) unsigned NOT NULL DEFAULT '0',
  `lastSpeedCycle` int(10) unsigned NOT NULL DEFAULT '0',
  `speed` bigint(20) unsigned NOT NULL DEFAULT '0',
  `bin_hash` blob NOT NULL,
  `image` varchar(255) NOT NULL,
  `screen1` varchar(255) NOT NULL,
  `screen2` varchar(255) NOT NULL,
  `screen3` varchar(255) NOT NULL,
  `sticky` enum('0','1') NOT NULL DEFAULT '0',
  `imdb` varchar(10) NOT NULL DEFAULT '0',
  `recomend` enum('0','1') NOT NULL DEFAULT '0',
  `kinopoisk` varchar(10) NOT NULL DEFAULT '0',
  `reseed` int(9) NOT NULL DEFAULT '0',
  `moder` enum('um','bad','ok') NOT NULL DEFAULT 'um',
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`info_hash`),
  UNIQUE KEY `id_2` (`id`),
  KEY `filename` (`filename`),
  KEY `category` (`category`),
  KEY `uploader` (`uploader`),
  KEY `bin_hash` (`bin_hash`(20)),
  KEY `id` (`id`),
  FULLTEXT KEY `filename_index` (`filename`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3288 ;

CREATE TABLE IF NOT EXISTS `xbtit_files_thanks` (
  `infohash` char(40) NOT NULL DEFAULT '0',
  `userid` int(11) NOT NULL DEFAULT '0',
  KEY `infohash` (`infohash`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Описание словами:
users - таблица с пользователями
files - таблица с раздачами
files_thanks - таблица хранит id пользователей ,сказавших спасибо для конкретной раздачи

Запросы:

1. вывести первые 10 записей из таблицы users, отсортированных по убыванию общего количества user.id = files.uploader
Иными словами вывести 10 пользователей имеющих наибольшее количество раздач, т.е. являющихся аплоадерами в раздаче

2. Тоже самое но сортировать по общему количеству полученных "спасибо" для всех раздач в которых пользователь является аплоадером


Надеюсь объяснил достаточно понятно. Если будет нужно, то постараюсь переформулировать

Неактивен

 

#2 10.04.2010 00:49:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Прошу помочь с двумя запросами

1.

SELECT u.* FROM users u JOIN files f ON user.id = f.uploader GROUP BY f.uploader ORDER BY count(f.uploader) DESC LIMIT 10;


2.
SELECT DISTINCT u.* FROM users u JOIN files f ON user.id = f.uploader JOIN files_thanks ft ON ft.infohash=f.info_hash GROUP BY f.uploader ORDER BY count(ft.infohash) DESC LIMIT 10;


Это пример плохого (с точки зрения быстродействия) решения (зато одним запросом).
Имеет смысл решать данные задачи в несколько этапов: сначала находите id пользователей, имеющих наибольшее кол-во раздач, затем по id получаете всюнеобходимую инфу о данных пользователях.

Неактивен

 

#3 10.04.2010 11:28:26

aledain
Участник
Зарегистрирован: 09.04.2010
Сообщений: 4

Re: Прошу помочь с двумя запросами

Спасибо. Всё работает.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson