MySQL. Как ограничить выборку 100 записями, если LIMIT занят для пагинации?

doran7

Новичок
Из таблицы БД (MySQL) делается выборка записей с сортировкой по полю рейтинга. Эта выборка разбивается на страницы пагинатором. Основной запрос такой:
Код:
SELECT * FROM $tbl WHERE pid=$pid ORDER BY p1cnt DESC LIMIT $start, $limit
Пока эта выборка не ограничена количеством записей (в смысле, выбираются все записи таблицы БД). Но я хочу выбирать 100 записей и не более. Как это сделать, если LIMIT занят, он в запросе используется для пагинации.
Прошу корифеев помочь, хотя бы указать, куда копать.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
doran7, выборка все же ограничена (Первое ограничение в WHERE, а второе в LIMIT) и тебе придется описать нормально что ты хочешь сделать.
 

Kotofey

FloodMaster.
Из таблицы БД (MySQL) делается выборка записей с сортировкой по полю рейтинга. Эта выборка разбивается на страницы пагинатором. Основной запрос такой:
Код:
SELECT * FROM $tbl WHERE pid=$pid ORDER BY p1cnt DESC LIMIT $start, $limit
Пока эта выборка не ограничена количеством записей (в смысле, выбираются все записи таблицы БД). Но я хочу выбирать 100 записей и не более. Как это сделать, если LIMIT занят, он в запросе используется для пагинации.
Прошу корифеев помочь, хотя бы указать, куда копать.
вот как-раз в переменной $limit и должно быть число 100; Понятия не имею каким образом ты сделал пагинацию, если у тебя на страницу выводиться не то количество записей которые тебе надо.
 

С.

Продвинутый новичок
Чего тут не понятно? Наш друг хочет так:
SELECT ... LIMIT 1,20 TOTAL_LIMIT 100

Дружок, ты же хозяин в своей програме. Сделай так, чтобы было
SELECT ... LIMIT 80,20
и больше 80 это число не поднималось. Не надо свои обязанности возлагать на SQL сервер.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
С., SELECT ... LIMIT 1,20 TOTAL_LIMIT 100 < это как так? Взять 20 записей, а потом из их числа взять 100? Объясни мне что ему надо.
 

Kotofey

FloodMaster.
С., SELECT ... LIMIT 1,20 TOTAL_LIMIT 100 < это как так? Взять 20 записей, а потом из их числа взять 100? Объясни мне что ему надо.
Ему надо получить 100 записей, а уже из них делать пагинацию, то-есть 5 страниц, по 20 записей. Вот как-то так наверное
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кхм, я тоже так подумал, но толку от этого - никакого.
 

С.

Продвинутый новичок
Кхм, я тоже так подумал, но толку от этого - никакого.
Разумеется. Просто все та же тенденция, что де SQL сделает за тебя всю работу. Суммы посчитает и вдоль, и поперек, записи выдаст слева направо. и вот теперь еще будет контролировать пользовательский ввод.
 

doran7

Новичок
Ему надо получить 100 записей, а уже из них делать пагинацию, то-есть 5 страниц, по 20 записей. Вот как-то так наверное
Да, так. Я не хочу в пагинаторе выводить все страницы на все ненужные мне записи, когда мне нужно только 100 первых их них. Но пока не пойму, как это сделать.
Что такое TOTAL_LIMIT? Поиск в гугле ничего путного не дал...
 
Последнее редактирование:

doran7

Новичок
Вроде решил вопрос. У меня в пагинаторе общее количество страниц определяется кодом с запросом:
Код:
$q = "SELECT COUNT(*) as num FROM $tbl WHERE pid=$pid";
$total_pages = mysqli_fetch_array(mysqli_query($link, $q));
$total_pages = $total_pages[num];
если не определять $total_pages а просто поставить
Код:
$total_pages = 100; // или равно 50 или 80, для проверки работы
то все вроде работает.
Спасибо всем, кто откликнулся. Без ваших ответов на первоначальный вопрос я бы до решения вряд ли дошел самостоятельно. Надо было начать мыслить в нужную сторону.
 

vasinsky

Новичок
5 копеек:
а зачем вы используете mysqli_fetch_array() ? наверника работаете только с ассоциативным массивом.
она же вернёт 2 массива - индексный и ассоциативный. используйте либо с 2м аргументом, либо mysql_fetch_assoc()

и к тому же

Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL.
 
Сверху