Задавайте вопросы, мы ответим
Вы не зашли.
Задача в том, чтобы сделать банальную постраничную навигацию, например такого вида << 3 4 5 6 7 >
Но в таблице могут хранится тысячи записей. Если сделать count(*) из таблицы, наверняка это не самый лучший способ? этот запрос ведь будет выполнятся при каждом переходе по страницам.
Я сделал так : выбираю лимитом. знаю с какой записи начинать и сколько выбирать. из этого я могу получить навигацию такого типа : << 3 4 5 . Но дальше я не знаю есть ли записи еще для выборки для 6 страницы. Я могу лимитом выбирать на одну запись больше, тогда я узнаю существует ли следующая 6 страница, а саму лишию запись при выводе на экран откинуть. Тогда получу навигацию такую : << 3 4 5 6 . А как можно узнать есть ли записи дальше еще ? хотя бы еще на одну страницу. Ладно на одну запись больше делать выборку, но на 11 если на страницу выводится по 10 записей, слишком много лишней информации получается...
кроме как count(*) или SQL_CALC_FOUND_ROWS ничего больше не придумывается.
Надеюсь мысль донести получилось) Плиз Хелп
Неактивен
Можете хранить число записей в данной таблице в отдельной таблице и обновлять триггером при вставке и удалении записей. Это сработает только если всегда отображается вся таблица, а не конкретная выборка.
Также можете отдельным запросом с LIMIT выбирать тольео id-шники, тогда их можно и на 100 больше, ничего страшного не произойдет. Затем уже SELECT * WHERE ID IN (123,124,125,126,127,128,129,130,131,132)
Неактивен
Спасибо большое мысли в этих направлениях были тоже, но показалось, что это тоже "тяжеловатые" варианты, наверно из-за неопытности и неуверенности.
Попробую подвесить на триггер. в моем случае записи создаются\удаляются не так часто и такой вариант наверно будет получше чем дополнительный подзапрос, который наверно был бы лучше, если бы записи создавались\удалялись постоянно.
А под этими словами :
rgbeast написал:
Также можете отдельным запросом с LIMIT выбирать тольео id-шники, тогда их можно и на 100 больше, ничего страшного не произойдет.
Вы имеете ввиду, что нагрузка в данном случае вырастает незначительно ?
Отредактированно Student20 (03.10.2008 02:22:13)
Неактивен
Скорее всего вырастет незначительно, так как если обход по индексу - то он происходит быстро, а если сортировка, то все равно выполняется сначала сортировка, а потом LIMIT.
Неактивен
А если не по всей таблице а с условием и LIMIT, то сортировка будет по результату или тоже сначала сортировка по всей таблице, а потом выборка по условию ?
P.S. кажется я понял. сначала условие, потом сортировка, потом лимит
Отредактированно Student20 (03.10.2008 14:07:55)
Неактивен
Сначала WHERE потом сортировка того, что осталось, затем LIMIT
Есть альтернативный вариант - если сортировка по ключу, то обходит по ключу в порядке сортировки проверяет WHERE и так пока не достигнет LIMIT
Неактивен
Спасибо за помощь !
Неактивен