Моя задача состоит в том, чтобы у меня была таблица, например, сообщений на форуме, и я хочу получить правильное смещение для предложения LIMIT.
Чтобы проиллюстрировать пример: Table Post - пожалуйста, помните, что OFFSET - это число /Индекс строки.
OFFSET 0: ID = 17, AUTHOR = ABC, CREATE_DATE = 2011-05-01
OFFSET 1: ID = 39, AUTHOR = ABC, CREATE_DATE = 2011-05-02
OFFSET 2: ID = 77, AUTHOR = ABC, CREATE_DATE = 2011-05-03
OFFSET 3: ID = 78, AUTHOR = ABC, CREATE_DATE = 2011-05-04
OFFSET 4: ID = 99, AUTHOR = ABC, CREATE_DATE = 2011-05-05
OFFSET 5: ID = 33, AUTHOR = ABC, CREATE_DATE = 2011-05-06
OFFSET 6: ID = 45, AUTHOR = ABC, CREATE_DATE = 2011-05-07
OFFSET 7: ID = 11, AUTHOR = ABC, CREATE_DATE = 2011-05-08
OFFSET 8: ID = 13, AUTHOR = ABC, CREATE_DATE = 2011-05-09
OFFSET 9: ID = 88, AUTHOR = ABC, CREATE_DATE = 2011-05-10
Теперь я хочу сделать запрос для ID = 45, и моя нумерация страниц должна дать результат 5 записей на странице.
SELECT Table.* FROM Table WHERE Table.id = 45 ORDER BY Table.create_date;
Результат одинстрока с ID = 45. И тогда я хочу знать, что смещение составляет 6 по отношению к 10 записей в общей сложности в таблице.Мне нужно 5 строк на страницу, поэтому x = 5 для следующего оператора.
Другими словами, я знаю, что строка со смещением = 6 находится на 2-й странице страницы результатов с 5 записями на странице.
SELECT Table.* FROM Table LIMIT x, 5
Откуда я знаю x?
Моя первая идея - я выбираю все идентификаторы из таблицы и просто ищу правильный идентификатор, а затем делю смещение на 5.
Вопрос: Есть ли лучший способ сделать это в SQL, потому что мне кажется, что это очень распространенная проблема?
Дополнительный вопрос: SQL-решение хорошо;как это сделать в MySQL конкретно, если есть разница?