Re:Выборка страницы

From
Sergiy Medvynskyy (2:5020/175.2)
To
Alexander Goldun
Date
2006-06-08T12:01:04Z
Area
SU.DBMS.SQL
From: "Sergiy Medvynskyy" <medvynskyy@xtramind.com>


 AG> Выяснить номер записи в выборке, например подсчитав count(*) по условию 
 AG> сортировки выборки, типа такого
 AG> SELECT count(tiket_id) FROM tiket WHERE customer_id=? AND 
 AG> creation_date<? (правда нужно обеспечить однозначность сортировки)

 AG> Из полученного номера выяснить страницу и, соответственно номер 
 AG> начальной записи n - арифметика.

Прошу прощения, но я, видимо, не силен в арифметике :). Тут же нужно не только
количество элементов в выборке, но и индекс в ней нужного элемента. А узнать
это, не грузя все ticket_id, не удастся (по крайней мере стандартными SQL
операторами).

 AG> Дальше выборка диапазона имеющимися средствами, типа такого:
 AG> SELECT TOP m START AT n * FROM ....

 >> ЗЫ: По возможности без использования особенностей БД. Если это невозможно,
 >> то  для Oracle и MS SQL.

 AG> Здесь зависит от особенностей СУБД только последний пункт. Обсуждался 
 AG> как-от в fido7.su.dbms
 AG> http://groups.google.ru/group/fido7.su.dbms/browse_frm/thread/647d9d32f66
 AG> 77d95?hl=ru Про постраничную выборку для MSSQL тут:
 AG> http://sql.ru/faq/faq_topic.aspx?fid=105

Жаааль, что нельзя стандартом. Опять, видимо, прийдется в прогу DB-зависимый
код добавлять :(. Или отказаться от такой оптимизации.

Sergiy Medvynskyy

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
SEEN-BY: 50/12 203 450/186 1024 451/30 454/9 4614/20 5000/5000 5001/5001
SEEN-BY: 5010/53 5011/13 5012/23 46 5015/28 5019/31 5020/175 400 545 639 715
SEEN-BY: 5020/758 830 1523 1604 2238 4441 5021/3 29 5022/128 5025/3 750
SEEN-BY: 5026/10 45 5027/12 5029/32 5030/473 556 966 1063 1080 1339 1900
SEEN-BY: 5035/38 5040/47 5042/13 5045/7 5047/47 5054/1 8 9 28 35 37 45 63 67
SEEN-BY: 5055/95 5059/9 5062/1 5077/70 5080/68 1003 5082/6 5083/21 5084/32
SEEN-BY: 5085/13 5090/106 5095/20 5096/18 5099/133
PATH: 5020/175 4441 545 5054/1 37