Выберите n строк без LIMIT mysql - PullRequest
       9

Выберите n строк без LIMIT mysql

4 голосов
/ 08 августа 2011

У меня проблема.Я хотел бы получить только 300 строк из таблицы, не касаясь LIMIT.Мне нужно LIMIT для нумерации страниц.Возможно ли это в MySQL?

Мой текущий запрос:

SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id 
    FROM mm_ads AS a WHERE a.category = 227 AND a.status = 1 
    ORDER BY id DESC LIMIT 40,20

Редактировать:

Простое объяснение: мне нужно получить из системы последний300 объявлений, но мне нужно сохранить нумерацию страниц, потому что я не хочу, чтобы 300 строк отображались на одной странице.

Ответы [ 4 ]

6 голосов
/ 08 августа 2011
SELECT *
FROM (
   SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id 
   FROM mm_ads AS a 
   WHERE a.category = 227 AND a.status = 1 
   ORDER BY id DESC 
   LIMIT 300
) t
LIMIT 40,20

Если целью является ускорение запроса, то вы можете создать составной индекс:

ALTER TABLE `mm_ads` 
    ADD INDEX `mm_ads_index` (`category` ASC, `status` ASC, `id` DESC);
2 голосов
/ 08 августа 2011

Используйте SQL_CALC_FOUND_ROWS после SELECT:

SELECT SQL_CALC_FOUND_ROWS *

РЕДАКТИРОВАТЬ:

И в php запустите эту строку, чтобы получить количество строк:

list($int_rows) = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"));

Thisбудет проходить по всем строкам, получать общую сумму, но не извлекать все строки.

EDIT2:

Возможно, вы неправильно поняли ваш вопрос, однако это общее решение для нумерации страниц.

1 голос
/ 15 августа 2013

Простое решение: Fits подсчитывает только количество нужных вам результатов и использует его в разбивке на страницы, а затем использует ограничение в запросе для загрузки данных на каждую страницу.

SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id ОТ mm_ads КАК ГДЕ a.category = 227 И a.status = 1 ЗАКАЗ ПО ИДЕ DESC LIMIT 40,20

не имеет значения, насколько велика вашабаза данных, это только дает вам 20 результатов (хотя он ищет всю базу данных)

0 голосов
/ 08 августа 2011

Еще одна вещь, которую вы можете сделать, это просто извлечь все 300 строк из базы данных и сохранить их в массиве, а затем разбить на индексы массива

...