Использование PDO :: FETCH_ORI_ABS с MySQL - PullRequest
0 голосов
/ 04 мая 2019

Я выполняю несколько тестов производительности по нескольким способам получения как ограниченных, так и смещенных данных и общего количества строк в запросе. Наивным способом является выполнение запроса дважды, один раз для общего числа строк, и второй раз с предложением 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 года. Я не нашел другого ресурса о возможной поддержке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...