2013-06-17 2 views
2

Я пытаюсь получить запрос на разбиение на страницы для работы в MSSQL. Я проверил соединение, и если я просто запустил выделение, все будет работать нормально. Таким образом, проблем с подключением нет.Ошибка PHP MSSQL для разбивки на страницы

$result = mssql_query("SELECT * FROM DriverAppInfo ORDER BY appdate") 

Следующий мой код. Я хочу вернуть первые 20 записей, чтобы иметь возможность увеличить $ startrow и показать следующую страницу на следующей странице. Я смог заставить это работать для MYSQL, но преобразование в MSSQL и отсутствие функции LIMIT бросают меня за цикл.

if (!isset($_GET['startrow']) or !is_numeric($_GET['startrow'])) { 
$startrow = 0; 
} else { 
    $startrow = (int)$_GET['startrow']; 
} 



$result = mssql_query("SELECT TOP 20 FROM DriverAppInfo WHERE appdate NOT IN 
        (SELECT TOP $startrow FROM DriverAppInfo ORDER BY appdate ASC) 
       ORDER BY appdate ASC") 

       or die("Couldn't connect to SQL Server Table on $myDB"); 

После этого ошибки при подключении к таблице. Так что с моим синтаксисом запроса что-то не так. Любая помощь будет принята с благодарностью

+0

'выбрать верх 0' не имеет смысла ... –

+0

@Marc B select top 0 не должен ничего выбирать, тогда вы получите первые 20 записей в качестве первой страницы. На следующей странице $ startrow будет увеличиваться на 20, и вы бы выбрали TOP 20 не в выбранном 20. Таким образом, вы получите записи 21-40 – Djacksway

ответ

2

В SQL Server row_number() обеспечивает простой способ постраничной:

select * 
from (
     select row_number() over (order by appdate) rn 
     ,  * 
     from DriverAppInfo 
     ) as SubQueryAlias 
where rn between 21 and 40 -- Second page 

Если у вас есть SQL Server 2012, вы можете использовать offset:

select * 
from DriverAppInfo 
order by 
     appdate 
offset 20 rows 
fetch next 20 rows only 
Смежные вопросы