Разбиение на страницы PHP SQL

Кажется, я не могу получить желаемый результат от этого запроса:

  SELECT * 
    FROM `messages` 
   WHERE `msgType` = '0' 
     AND `status` = '0' 
ORDER BY `dateSent` DESC LIMIT 20, 0 

По сути, я пытаюсь показать 20 результатов на странице, но этот запрос ничего не возвращает. (Для справки, все экземпляры в базе данных имеют msgType и статус 0)

РЕДАКТИРОВАТЬ: Удаление части LIMIT дает мне результаты, но не делится и не разбивается на страницы, как я хочу.

EDIT v2 LIMIT должен сопровождаться OFFSET, # OF RECORDS (я тупой)


person st4ck0v3rfl0w    schedule 23.07.2010    source источник
comment
Какой вариант SQL вы используете?   -  person Jeff Rupert    schedule 23.07.2010


Ответы (4)


LIMIT 20, 0  

Означает: начать с строки 21, вернуть 0 строк, поэтому ваш ответ правильный.

Вы имеете в виду:

LIMIT 0, 20  
person Wrikken    schedule 23.07.2010
comment
Смещение основано на нуле, но это проблема здесь - person OMG Ponies; 23.07.2010
comment
Всего 24 записи. Когда я делаю LIMIT 1,20, это дает мне записи 23, 22, 21, 20....4 - person st4ck0v3rfl0w; 23.07.2010
comment
Вы совершенно правы, по какой-то причине у меня в голове возникла коллизия, я отредактирую соответственно.. - person Wrikken; 23.07.2010
comment
@ st4ck0v3rfl0w: Вы не первый, кто получает параметры в обратном порядке - я предпочитаю такие вопросы денормализованным моделям данных ... - person OMG Ponies; 23.07.2010

Попробуйте удалить одинарные кавычки вокруг ваших 0?

person hollsk    schedule 23.07.2010
comment
Большинство баз данных выполняют неявное преобразование между INT и string/VARCHAR. - person OMG Ponies; 23.07.2010

Мне потребовался ответ Ктулху, чтобы пробудить мою память - проблема в предложении LIMIT.

В MySQL, когда LIMIT принимает два параметра — первый — это смещение, означающее, с какой строки оно начинается, где первая строка равна нулю. Так:

LIMIT 20, 0

...начнет с 21-й строки и вернет... нулевые строки с этой точки.

Вам нужно изменить значения, чтобы вернуть что-либо:

LIMIT 0, 20

... чтобы получить первые 20 строк.

person Community    schedule 23.07.2010
comment
Я тупой. Это официально. Спасибо. - person st4ck0v3rfl0w; 23.07.2010

Какие результаты вы получаете при снятии лимита? Упростите, даже если запрос и без того прост. Разбейте проблему на части.

  • Сколько строк в БД соответствует условиям?
  • Каков тип данных msgType и статуса?
  • Что происходит, когда вы снимаете ограничение?
person cthulhu    schedule 23.07.2010
comment
Все строки соответствуют условиям. Тип данных msgType и статус — varchar. Когда я удаляю ограничение, он предоставляет результаты во временной последовательности, начиная с самого последнего - person st4ck0v3rfl0w; 23.07.2010