Я выполняю несколько тестов производительности по нескольким способам получения как ограниченных, так и смещенных данных и общего количества строк в запросе. Наивным способом является выполнение запроса дважды, один раз для общего числа строк, и второй раз с предложением LIMIT OFFSET
для получения фактических данных.
Я пытаюсь сделать это сейчас с помощью одного запроса, где я получаю все данные и использую fetch
с FETCH_ORI_ABS
, чтобы выбрать только те данные, которые мне нужны, но, похоже, это не работает. Я получаю данные, начиная со строки 1 до «смещение + предел».
Это код:
function method2($pdo, $query, $limit, $offset) {
$stmt = $pdo->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
$totalrows = $stmt->rowCount();
$data = [];
for ($i = $offset; $i < max($totalrows, $offset + $limit); $i++) {
$data[] = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, $i);
}
return array("totalrows"=>$totalrows, "data"=>$data);
}
Я нашел этот вопрос , говорящий мне, что курсоры не поддерживаются, но это с 2014 года. Я не нашел другого ресурса о возможной поддержке.