доброе время суток
есть талица:
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)