Re:Выборка страницы
- From
- Alexander Goldun (2:5080/1003)
- To
- Sergiy Medvynskyy
- Date
- 2006-06-07T22:10:06Z
- Area
- SU.DBMS.SQL
From: Alexander Goldun <tmpmail1@mediatech.ru>
Sergiy Medvynskyy пишет:
> Есть отсортированная выборка из таблицы (запрос) и есть ключ элемента из
> таблицы и есть размер страницы (скажем 100 элементов). Необходимо ограничить
> отсортированную выборку так, что бы она возвращала записи со страницы на
> которой находится элемент определяемый ключем.
>
> Пример:
> select ticket_id from ticket where customer_id=? ordered by creation_date
> Необходимо дополнить запрос так, что бы возвращались ticket_id рассположенные
> на странице где рассположена запись с ticket_id равным некоторому числу.
Выяснить номер записи в выборке, например подсчитав count(*) по условию
сортировки выборки, типа такого
SELECT count(tiket_id) FROM tiket WHERE customer_id=? AND
creation_date<? (правда нужно обеспечить однозначность сортировки)
Из полученного номера выяснить страницу и, соответственно номер
начальной записи n - арифметика.
Дальше выборка диапазона имеющимися средствами, типа такого:
SELECT TOP m START AT n * FROM ....
> ЗЫ: По возможности без использования особенностей БД. Если это невозможно, то
> для Oracle и MS SQL.
Здесь зависит от особенностей СУБД только последний пункт. Обсуждался
как-от в fido7.su.dbms
http://groups.google.ru/group/fido7.su.dbms/browse_frm/thread/647d9d32f6677d95?hl=ru
Про постраничную выборку для MSSQL тут:
http://sql.ru/faq/faq_topic.aspx?fid=105
--- ifmail v.2.15dev5
* Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003@fidonet)
SEEN-BY: 46/50 50/12 203 278/169 450/186 1024 451/30 452/25 154 454/9 2432/260
SEEN-BY: 4614/20 4615/21 5000/5000 5001/100 5001 5010/2 53 5011/13 5012/23 30
SEEN-BY: 5012/46 5015/28 5019/31 5020/175 400 545 639 715 758 760 830 1042
SEEN-BY: 5020/1523 1604 1641 2238 4441 5021/3 29 5022/128 5025/3 750 5026/10
SEEN-BY: 5026/45 5027/12 5028/61 5029/32 60 5030/115 473 556 966 1063 1080
SEEN-BY: 5030/1339 1900 5035/38 5040/47 5041/4 5042/13 21 5045/7 5047/47
SEEN-BY: 5049/19 164 5054/1 8 9 28 35 37 45 50 63 67 5055/95 5058/999 5059/9
SEEN-BY: 5062/1 5070/156 5071/22 5077/70 5078/20 5080/68 147 239 1003 5082/6
SEEN-BY: 5083/21 5084/32 5085/13 87 5090/106 5093/4 5095/20 5096/18 5097/64
SEEN-BY: 5099/133 6028/1 6055/2 6083/12
PATH: 5080/1003 5020/4441 545 5054/1 37