SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.04.2015 12:49:00

Syegorius
Завсегдатай
Зарегистрирован: 29.10.2010
Сообщений: 28

как правильно написать запрос

доброе время суток

есть талица:

CREATE TABLE IF NOT EXISTS `r_20_u_fs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `man_id` int(10) NOT NULL,
  `country_id` int(10) NOT NULL,
  `region_id` int(10) NOT NULL,
  `city_id` int(10) NOT NULL,
  `sex` tinyint(1) NOT NULL,
  `name` varchar(16) NOT NULL,
  `surname` varchar(16) NOT NULL,
  `nickname` varchar(16) NOT NULL,
  `birthdate` int(10) NOT NULL,
  `priv` tinyint(1) NOT NULL,
  `likes_count` int(8) NOT NULL,
  `url` varchar(16) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=47 ;

--
-- Dumping data for table `r_20_u_fs`
--

INSERT INTO `r_20_u_fs` (`id`, `man_id`, `country_id`, `region_id`, `city_id`, `sex`, `name`, `surname`, `nickname`, `birthdate`, `priv`, `likes_count`, `url`) VALUES
(1, 13, 5, 0, 0, 1, 'thirteen', '13s', '13n', 0, 0, 10, 'anna1'),
(2, 1, 7, 0, 0, 1, 'first', '1sxx', '1nxx', 0, 1, 10, ''),
(3, 2, 153, 0, 0, 1, 'second', '2sxx', '2nxx', 0, 2, 10, ''),
(4, 3, 0, 0, 0, 1, 'third', '3sxx', '3nxx', 0, 3, 10, ''),
(5, 4, 5, 0, 0, 1, 'fourth', '4sxx', '4nxx', 0, 4, 120, ''),
(6, 5, 7, 0, 0, 1, 'fifth', '5sxx', '5nxx', 0, 5, 119, ''),
(7, 6, 153, 0, 0, 1, 'sixth', '6sxx', '6nxx', 0, 6, 10, ''),
(8, 14, 5, 17, 0, 0, 'fourteenth', '14sxx', '14xss', 0, 0, 20, ''),
(9, 36, 5, 17, 0, 0, 'fourteenth', '36sxx', '36xss', 0, 0, 21, ''),
(10, 15, 5, 18, 0, 0, 'fifteenth', '15sxx', '15xss', 0, 0, 20, ''),
(11, 16, 5, 19, 0, 0, '6teenth', '16sxx', '16xss', 0, 0, 20, ''),
(12, 17, 5, 17, 0, 0, '7teenth', '17sxx', '17xss', 0, 0, 19, ''),
(13, 18, 5, 18, 0, 0, '8teenth', '18sxx', '18xss', 0, 0, 18, ''),
(14, 19, 5, 19, 0, 0, '9teenth', '19sxx', '19xss', 0, 0, 21, ''),
(15, 20, 5, 20, 0, 0, '20teenth', '20sxx', '20xss', 0, 0, 20, ''),
(16, 21, 5, 17, 0, 0, '21teenth', '21sxx', '21xss', 0, 0, 20, ''),
(17, 22, 5, 18, 0, 0, '22teenth', '22sxx', '22xss', 0, 0, 20, ''),
(18, 23, 5, 19, 0, 0, '23teenth', '23sxx', '23xss', 0, 0, 20, ''),
(19, 24, 5, 17, 0, 0, '24teenth', '24sxx', '24xss', 0, 0, 20, ''),
(20, 25, 5, 18, 0, 0, '25teenth', '25sxx', '25xss', 0, 0, 1, ''),
(21, 26, 5, 19, 0, 0, '26teenth', '26sxx', '26xss', 0, 0, 2, ''),
(22, 27, 5, 17, 0, 0, '27teenth', '27sxx', '7xss', 0, 7, 20, ''),
(23, 28, 5, 18, 0, 0, '28teenth', '27sxx', '27xss', 0, 0, 0, ''),
(24, 29, 5, 17, 0, 0, '29teenth', '24sxx', '24xss', 0, 0, 20, ''),
(25, 30, 5, 19, 0, 0, '30teenth', '24sxx', '24xss', 0, 0, 20, ''),
(26, 31, 5, 17, 0, 0, '31teenth', '21sxx', '24xss', 0, 0, 20, ''),
(27, 32, 5, 18, 0, 0, '32teenth', '32sxx', '32xss', 0, 0, 20, ''),
(28, 33, 5, 17, 0, 0, '33teenth', '24sxx', '24xss', 0, 0, 20, ''),
(29, 34, 5, 17, 0, 0, '34teenth', '24sxx', '24xss', 0, 0, 20, ''),
(30, 35, 5, 18, 0, 0, '35teenth', '24sxx', '24xss', 0, 0, 20, ''),
(31, 54, 5, 17, 0, 0, 'fourteenth', '14sxx', '14xss', 0, 0, 20, ''),
(32, 55, 5, 18, 0, 0, 'fifteenth', '15sxx', '15xss', 0, 0, 20, ''),
(33, 56, 5, 19, 0, 0, '6teenth', '16sxx', '16xss', 0, 0, 20, ''),
(34, 57, 5, 17, 0, 0, '7teenth', '17sxx', '17xss', 0, 0, 19, ''),
(35, 58, 5, 18, 0, 0, '8teenth', '18sxx', '18xss', 0, 0, 18, ''),
(36, 59, 5, 19, 0, 0, '9teenth', '19sxx', '19xss', 0, 0, 21, ''),
(37, 60, 5, 20, 0, 0, '20teenth', '20sxx', '20xss', 0, 0, 20, ''),
(38, 61, 5, 17, 0, 0, '21teenth', '21sxx', '21xss', 0, 0, 20, ''),
(39, 62, 5, 18, 0, 0, '22teenth', '22sxx', '22xss', 0, 0, 20, ''),
(40, 63, 5, 19, 0, 0, '23teenth', '23sxx', '23xss', 0, 0, 20, ''),
(41, 64, 5, 17, 0, 0, '24teenth', '24sxx', '24xss', 0, 0, 20, ''),
(42, 65, 5, 18, 0, 0, '25teenth', '25sxx', '25xss', 0, 0, 1, ''),
(43, 66, 5, 19, 0, 0, '26teenth', '26sxx', '26xss', 0, 0, 2, ''),
(44, 67, 5, 17, 0, 0, '27teenth', '27sxx', '7xss', 0, 7, 20, ''),
(45, 68, 5, 18, 0, 0, '28teenth', '27sxx', '27xss', 0, 0, 0, ''),
(46, 69, 5, 17, 0, 0, '29teenth', '24sxx', '24xss', 0, 0, 20, '');
 


мне необходимо вывести всю таблицу, но так что бы в запросе было по 20 записей и сортировались они по likes_count desc, id desc,а limit всегда должен быть 0, 20 (не limit 20, 20 или limit 1000, 20, а именно limit 0, 20)

первый запрос выглядит так:

SELECT * FROM `r_20_u_fs` WHERE 1 ORDER BY likes_count DESC , id DESC LIMIT 0, 20


дальше берется последний id и значание likes_count у последней строки из предыдущей выборки (в данном случае это id = 26, likes_count = 20) и второй запрос выглядит так:

SELECT * FROM `r_20_u_fs` WHERE id < 26 and likes_count <= 20 ORDER BY likes_count DESC , id DESC LIMIT 0 , 20


точно также берем последний значения у пред. запроса и делаем третий запрос который выглядит так:

SELECT * FROM `r_20_u_fs` WHERE id < 20 and likes_count <= 1 ORDER BY likes_count DESC , id DESC LIMIT 0 , 20


в результате 3 запросов мы получим 42 строки, хотя в таблице их 46. это происходит потому что главным полем для сортировки является likes_count, а не id и в случае, если есть запись типа id = 10, likes_count = 100 и id = 11, likes_count = 10 вторая запись потеряется т.к. 11>10.

поэтому вопрос звучит так - как указать mysql, что поиск необходимо начинать с какого-то определенного id.

заранее благодарен за помощь!

Отредактированно Syegorius (19.04.2015 12:51:06)

Неактивен

 

#2 19.04.2015 16:17:28

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

Re: как правильно написать запрос

Без ввода дополнительного поля с нумерацией по данной сортировки никак.
Почему нельзя limit 1000, 20 ?

Неактивен

 

Board footer

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