Постраничный вывод, универсально для всех БД.

Astral Man

We Will Rock You
Постраничный вывод, универсально для всех БД.

Постраничный вывод обсуждался на один раз, в основном для MySql, но меня интерисует следующее - Для сайта предпологается использование разных БД (MySQL, MSSQL..), может кто сталкивался с этим.
Прошу совета по написанию функции похожей на LIMIT в MySql.
 

trigger

Guest
Директива LIMIT существует во всех системах управления БД.
По-крайней мере по стандарту должна быть.
Во всех теперяшних более-менее известных СУБД она есть.
 

Three Daws

Guest
trigger не верно :)

задача имеет другое решение как минимум для MS-SQL Server и Sybase.
 

Найч

Алгоритмик :-)
trigger
Не поверишь, но в M$ ее нет :)
Есть аналог top, но в нем нет смещения.

-~{}~ 03.05.04 22:27:

Astral Man
Я решал подобную задачу через курсоры
 

Three Daws

Guest
Astral Man проще говоря, насколько мне известно, единственный универсальный SQL-запрос равно справедливый для СУБД Oracle, MySQL, PostgreSQL, MS-SQL, Sybase, Interbase построить нельзя.

напрашивается вывод - использовать свою ф-ию, трансформируя запрос в зависимости от СУБД или попробовать использовать ADODB :
PHP:
  /**
  * Will select, getting rows from $offset (1-based), for $nrows. 
  * This simulates the MySQL "select * from table limit $offset,$nrows" , and
  * the PostgreSQL "select * from table limit $nrows offset $offset". Note that
  * MySQL and PostgreSQL parameter ordering is the opposite of the other.
  * eg. 
  *  SelectLimit('select * from table',3); will return rows 1 to 3 (1-based)
  *  SelectLimit('select * from table',3,2); will return rows 3 to 5 (1-based)
  *
  * Uses SELECT TOP for Microsoft databases (when $this->hasTop is set)
  * BUG: Currently SelectLimit fails with $sql with LIMIT or TOP clause already set
  *
  * @param sql
  * @param [offset] is the row to start calculations from (1-based)
  * @param [nrows]    is the number of rows to get
  * @param [inputarr] array of bind variables
  * @param [secs2cache]   is a private parameter only used by jlim
  * @return   the recordset ($rs->databaseType == 'array')
  */
  function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
 

Yukko

Новичок
Найч
с курсорами согласен, я про вот это :) :

select top 10 *
from (select top 60 *
from sl
order by sl_id)as s
order by sl_id desc
 
Сверху