SQL Count общее количество строк при использовании LIMIT
Я пытаюсь создать простую галерею изображений, отображающую 16 изображений на странице. Я использую LIMIT 16 для отображения правильной суммы на странице, но если есть более 16 строк, я хочу иметь ссылки внизу, позволяя пользователю перейти на следующую страницу.
Я знаю, что мог бы достичь желаемого результата, удалив ограничение и просто используя цикл для отображения первых 16 элементов, но это было бы неэффективно. Очевидно, что COUNTING количество строк всегда равно 16.
$sql .= "posts p, images im, postimages pi WHERE
i.active = 1
AND pi.post_id = p.id
AND pi.image_id = im.image_id
ORDER BY created_at LIMIT 16";
Может ли кто-нибудь предложить более эффективный способ сделать это?
Спасибо
Ответы
Ответ 1
Вам нужно компенсировать результаты для данной страницы, в которой вы находитесь, в дополнение к отдельному запросу для получения счета, о котором говорили все остальные.
$sql .= "posts p, images im, postimages pi WHERE
i.active = 1
AND pi.post_id = p.id
AND pi.image_id = im.image_id
ORDER BY created_at
LIMIT ". ($page - 1) * $pagesize .", ". $pagesize;
Здесь будут применяться обычные предупреждения об инъекции SQL.
Ответ 2
В MySQL
:
SELECT SQL_CALC_FOUND_ROWS
*
FROM posts p, images im, postimages pi
WHERE i.active = 1
AND pi.post_id = p.id
AND pi.image_id = im.image_id
ORDER BY
created_at
LIMIT 16;
SELECT FOUND_ROWS();
Первый запрос вернет строки 16
, а второй запрос вернет вам число строк, которые будут возвращены, там нет предложения LIMIT
в первом запросе.
Вы можете использовать его, чтобы решить, показывать ли "следующую" ссылку или нет.
Ответ 3
Вы пытаетесь полностью разбиться на страницы или просто имеете this page
и next page
? Если это последний, вы можете просто LIMIT 17
и подсчитать строки результата. Если вам 17, вам нужно разбивать на страницы.
Ответ 4
Запустите отдельный запрос без ограничения, который возвращает только счет.
Ответ 5
используйте два запроса, где один из них - ваш запрос, а другой:
SELECT COUNT(primary_key) FROM ... WHERE...