使用LIMIT和OFFSET

时间:2019-05-09 14:17:26

标签: php sql sqlite

我正在尝试将页面实现到我的网页中。我已经知道了,以便用户可以将他们想要的页码放入要转到的网址栏中。我通过在URL栏中使用该数字并将其乘以10乘以SQL语句中的OFFSET参数来获得每页10条记录。

但是,如果我删除了LIMITOFFSET参数,我需要知道该SQL语句可以返回多少条记录。这是否可能在SQL语句中进行?还是我必须从数据库中请求每条记录并计算每页的长度?谢谢。

编辑:

如果我不使用LIMIT或OFFSET,我希望此语句可以返回的记录量

SELECT nfc_film.*, nfc_category.name FROM nfc_film
        JOIN nfc_film_category
          ON nfc_film.film_id = nfc_film_category.film_id
        JOIN nfc_category
          ON nfc_category.category_id = nfc_film_category.category_id
        WHERE title
          LIKE :searchterm OR nfc_category.name = :category
        LIMIT 10
        OFFSET :page

1 个答案:

答案 0 :(得分:2)

要获取当前查询返回的行数,由于您使用PDO标记了php,因此可以将fetchAll()count()一起使用

例如:

$sth = $dbh->prepare("<your query>");
$sth->execute();

$result = $sth->fetchAll();
$numberOfRows = count($result);

要获得表的总数行数,但仍使用LIMIT,您可以

在一个单独的查询中计数:

SELECT COUNT(*)
FROM nfc_film
JOIN nfc_film_category
ON nfc_film.film_id = nfc_film_category.film_id
JOIN nfc_category
ON nfc_category.category_id = nfc_film_category.category_id
WHERE title LIKE :searchterm OR nfc_category.name = :category;

或者使用GROUP BY在单个查询中完成操作(这将防止您误用*

--                          v------------- Random datas ------------------------v
SELECT COUNT(*) AS "Count", nfc_film.id, nfc_film.name, nfc_film.otherInformation, nfc_category.name FROM nfc_film
JOIN nfc_film_category
ON nfc_film.film_id = nfc_film_category.film_id
JOIN nfc_category
ON nfc_category.category_id = nfc_film_category.category_id
WHERE title
LIKE :searchterm OR nfc_category.name = :category
GROUP BY nfc_film.id, nfc_film.name, nfc_film.otherInformation, nfc_category.name
LIMIT 10
OFFSET :page