MySQL limit

В реляционных базах данных нет ни первой, ни последней записи. Данные лежат в куче, как песок в песочнице, так что вопрос сам по себе некорректен.

Однако, под этим вопросом многие подразумевают нечто другое. Некоторым нужно получить N записей добавленных последними или N записей с максимальными значениями какого-то поля. Главное тут – определиться с критерием этого выбора.

Предположим, что нам нужно выбрать 10 записей, которые были записаны последними. Для этого мы можем воспользоваться свойством целочисленного поля с AUTO_INCREMENT (в подавляющем большинстве случаев такие поля используются как первичные ключи, поэтому далее будем употреблять именно это понятие). Одно из свойств поля с AUTO_INCREMENT: если значение такого поля для одной записи меньше, чем для другой, то первая запись попала в таблицу раньше (если мы при внесении в базу не задавали значения первичного ключа и не изменяли его в дальнейшем). В случае, описанном выше, решение простое:

SELECT * FROM my_table ORDER BY id DESC LIMIT 10;

где id – собственно первичный ключ.

Все хорошо, но, на мой взгляд, слишком много ограничений, к тому же первичный ключ надо использовать только для идентификации записи. А использование его для сортировки напоминает хранение лука в женских чулках. Вместо этого (я не про чулки), вы можете воспользоваться другим свойством другого поля, вернее типа: если у вас в таблице есть поле TIMESTAMP, то знайте – при добавлении и изменении записи в него заносится текущая дата/время. Здорово? Завели поле и забыли про него, пока нам не понадобится время его изменения. А если у вас два таких поля, то в первом будет дата изменения, а во втором – дата создания (второе поле TIMESTAMP не изменяется при модификации записи).

Искомый в этом случае запрос ничем не будет отличаться от прошлого (который использовал первичный ключ для сортировки): SELECT * FROM my_table ORDER BY table_time DESC LIMIT 10;

table_time – наше любимое поле типа TIMESTAMP. Конечно, здесь тоже не все так безоблачно. При росте таблицы данный запрос будет все больше тормозить (ведь надо сначала отсортировать все(!) записи, а потом только выбрать из них 10 «лучших»). Можно, конечно, добавить индекс на это поле, но тогда скорость добавления новых записей в эту таблицу снизится (каждый раз будет меняться индекс таблицы).

Copyright http://phpclub.ru/faq/

Fukuda denshi узи - узи fukuda. слом построек и вывоз мусора.

Ссылки
Реклама