Мне требовалось создать очень сложную рандомную выборку, в итоге день кодинга и отладки. Результат - 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