[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: LIMIT OFFSET - повторение строк
T1grOK
Хочу поделиться ситуацией которая может наблюдаться при использовании LIMIT, OFFSET. (По крайней мере в Postgresql).
Мне требовалось создать очень сложную рандомную выборку, в итоге день кодинга и отладки. Результат - 150 строк кода, который при проверке вроде бы соответствовал требованиям.
Я очень обрадовался так как верный алгоритм "пришел" ко мне не сразу.
И вот финишная так сказать прямая, проверяю постраничную навигацию...и на тебе...!!! на разных страницах повторилась одна и та же запись. Ну думаю, где то в коде накосячил и OFFSET вычислил не правильно. Проверил, а все ведь на местах...
Начал делать запросы руками в базу и каково мое удивление, когда на запрос

SELECT * FROM table ORDER BY field LIMIT 1 OFFSET 3

и

SELECT * FROM table ORDER BY field LIMIT 1 OFFSET 4

Получил одну и ту же запись!!!
Недолго гугля нашел ответ, оказывается если в базе в сортируемом поле могут быть одинаковые значения, то и в зависимости от LIMIT OFFSET СУБД(или подсистема хранения данных...не суть важно) может по разному отсортировать данные!!! Во избежание чего необходимо указать дополнительное поле для сортировки(что то типо уточняющей сортировки, чтоб СУБД "не умничала")
Как для кого, а для меня это нонсенс!!!

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
Цитата (T1grOK @ 10.06.2013 - 21:29)
Недолго гугля нашел ответ, оказывается если в базе в сортируемом поле могут быть одинаковые значения, то и в зависимости от

А при чем тут Постгрес? smile.gif Любая БД при одинаковых значениях в полях, используемых для сортировки, выдаст их в псевдо-произвольном порядке.

PS. И да, вывод совершенно верный
Цитата (T1grOK @ 10.06.2013 - 21:29)
Во избежание чего необходимо указать дополнительное поле для сортировки(что то типо уточняющей сортировки, чтоб СУБД "не умничала")



_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Цитата (sergeiss @ 10.06.2013 - 17:37)
А при чем тут Постгрес? smile.gif Любая БД при одинаковых значениях в полях, используемых для сортировки, выдаст их в псевдо-произвольном порядке.

Я же написал, что для меня это нонсенс. Думаю не для одного меня.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
rooor
Цитата
это нонсенс

почему? при сортировке строки выдаст подряд, но в произвольном порядке...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.