Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Определить на какой странице находится запись
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Определить на какой странице находится запись

Страниц (1): [1]
 

1. 3d_killer - 24 Ноября, 2016 - 09:02:39 - перейти к сообщению
Исходные данные:
лимит при выводе страниц например 100
количество записей например 1000
и элемент с ID 560 (не по порядку)
при запросе сортируем по имени записи например name

Как имея id элемента можно получить страницу на которой он находится или точнее получить OFFSET чтобы при запросе с лимитом данный элемент попал в выборку?
2. Мелкий - 24 Ноября, 2016 - 10:20:31 - перейти к сообщению
Посчитать количество записей до этого элемента.
Раз по полю можно сортировать - значит для этого поля реализованы операторы больше и меньше. Значит элементарно считается
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(0) FROM tablename WHERE fieldname < 'target value'

Чуток целочисленных манипуляций и у вас есть номер страницы.

А так же, http://use-the-index-luke[dot]com/no-offset
3. 3d_killer - 24 Ноября, 2016 - 10:53:34 - перейти к сообщению
спасибо!
(Добавление)
Мелкий пишет:
Посчитать количество записей до этого элемента.
Раз по полю можно сортировать - значит для этого поля реализованы операторы больше и меньше. Значит элементарно считается
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(0) FROM tablename WHERE fieldname < 'target value'

Чуток целочисленных манипуляций и у вас есть номер страницы.

А так же, http://use-the-index-luke.com/no-offset

что то я поспешил, начал делать и не совсем понял как это определить
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT count(id) FROM TABLE WHERE.... ORDER BY name //Получили количество элементов
  3.  

Нас интересует элемент например id=483 лимит вывода на страницу 100 элементов
что то я не понял как мне поможет то запрос
4. Мелкий - 24 Ноября, 2016 - 13:17:40 - перейти к сообщению
А, есть только id. Я где-то потерял получение name по id.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(0) FROM tablename WHERE fieldname < (SELECT name FROM tablename WHERE id=?)

Или, наверное будет лучше (надо проверить поведение при случае отсутствия такого id):
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(0) FROM tablename CROSS JOIN (
  2. SELECT name AS needname FROM tablename WHERE id=?
  3. ) targetuser WHERE fieldname < needname

Хотя тоже надо поглядеть, что планировщик захочет сделать.
5. 3d_killer - 24 Ноября, 2016 - 13:44:18 - перейти к сообщению
Мелкий пишет:
SELECT count(0) FROM tablename WHERE fieldname < (SELECT name FROM tablename WHERE id=?)
да вот это вроде то, получаю позицию элемента в выборке, дальше понятно, благодарю

 

Powered by ExBB FM 1.0 RC1