Получить количество записей с SQL при использовании LIMIT и OFFSET - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь внедрить страницы в мою веб-страницу.Я понял, что пользователь может поместить номер страницы, которую он хочет, в строку URL, на которую он хочет перейти.Я сделал это, используя это число в строке URL и умножив его на 10 для параметра OFFSET в выражении SQL, чтобы получить 10 записей для каждой страницы.

Но мне нужно знать, сколько записей может быть возвращено этим оператором SQL, если я удалил параметры LIMIT и OFFSET.Возможно ли это в выражении 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 Ответ

2 голосов
/ 09 мая 2019

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