我正在尝试将页面实现到我的网页中。我已经知道了,以便用户可以将他们想要的页码放入要转到的网址栏中。我通过在URL栏中使用该数字并将其乘以10乘以SQL语句中的OFFSET
参数来获得每页10条记录。
但是,如果我删除了LIMIT
和OFFSET
参数,我需要知道该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
答案 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