2016-05-29 2 views
0

У меня есть список, выводящийся из mySQL с количеством из 20 элементов.mySQL Append to LIst

Пользователи будут добавлять и удалять элементы, которые входят в список, поэтому идентификатор предметов не является последовательным. Они могут быть 5, 10, 12, 13, 14, 27, 28, 31, 38, 40. Список ограничен 20 пунктами.

SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10 

Пользователь будет продолжать добавлять и удалять элементы, пока этот список отображается на экране. У меня есть значение последнего id в примере здесь, это 40.

Некоторые из этих элементов могут быть удалены, и новые элементы будут добавлены.

Как я могу запустить этот запрос, начиная с последнего известного идентификатора. Я добавляю идентификатор WHERE> 40. Могу ли я поставить предложение WHERE после предложения LIMIT 0,10.

SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10 WHERE id > $lastid 

Главное здесь я не хочу, чтобы показать уже показанные элементы, и я не знаю, если элементы были удалены, так что выполнение 1,10 может вызвать неправильные результаты. Мне нужны следующие 10 результатов сразу после последнего отображаемого элемента.

+0

Думаю, вам не стоит беспокоиться о удаленных элементах. Это будет настоящая боль, чтобы контролировать, должен ли элемент отображаться или нет на основе изменения элементов. Вы должны просто придерживаться порядка идентификаторов и фиксировать несколько элементов для каждой страницы. Тогда вам просто нужно управлять этими значениями с помощью предложения LIMIT. Всегда начинайте с 'LIMIT 1, 10' с' 10', являющимся числом элементов страницы, следующая страница будет 1 + 10, 10, которая является 'LIMIT 11,10'. Все это работает. Контролировать то, что должно быть показано, будет связано с добавлением ненужной сложности в вашу систему, например, куки, другие таблицы –

+0

И ужасная логика, чтобы проверить ее на каждого пользователя, который видит список и многое другое, каждый шаг каждого пользователя, идущий вперед и назад в разбивке на страницы , –

+0

Я не добавлял его в качестве ответа, потому что это мнение, хотя зная, что это поведение по умолчанию почти всех систем. –

ответ

0

Сохраните полученное значение id и добавьте условие в существующее предложение WHERE. (Вы не можете добавить второе предложение WHERE после LIMIT, это неверно. Оператор SELECT получает одно предложение WHERE.)

Я немного смущен, потому что запрос в вопросе показывает порядок по id в DESCENDING заказ. В этом случае вам понадобится следующее значение id: меньше последнее полученное значение.

Если вы заказываете в цене по возрастанию, а затем ...

SELECT t.* 
    FROM table t 
WHERE t.fields = vars 
    AND t.id > ? 
ORDER BY t.id ASC 
LIMIT 10 

Вопросительный знак есть привязка заполнителем ... при условии, что вы используете подготовленные заявления. Если вы не используете подготовленные операторы, используйте литерал вместо заполнителя привязки ... значение, которое вы в последний раз получили.

Если вы заказываете по идентификатору в порядке убывания, то вы хотите получить строки, у которых значение id меньше, чем - последний, который вы ранее получили.

Нетрудно сохранить значение id последней полученной строки, поместить ее в скрытый ввод на веб-странице и прочитать ее обратно, когда форма отправлена. (Игнорируйте дезинформированные предложения от Хорхе Кампоса.)

+0

Thankyou. Вы только что мне сообщили о чем-то, о чем я не думал. Я имел их в порядке убывания, поскольку последний был помещен в верхнюю часть экрана. Я должен буду добавить в верхнюю часть списка и принести старые результаты, нажав на экран. Или мне придется изменить порядок. Было бы лучше сохранить новые записи. Что-то обсудить с другими. Я также заметил, что вы взяли 0,10 и оставили его всего 10, не нужно разбивать страницы на известное возвращение 10. В моем случае это 50 или 100. – PHPDev

+0

У меня есть последний вопрос. Учитывая, что существует только одно предложение where, может ли оно идти после LIMIT 10. 'select * from table order by id desc limit 10, где id> lastid' - это действительный оператор или ему нужно предшествовать порядку и ограничению. – PHPDev

+0

Предложение WHERE не может быть выполнено после предложения ORDER BY или после предложения LIMIT. В этом примере предложение WHERE должно быть после списка таблиц и перед ORDER BY. В вашем заявлении есть только одно место. Синтаксис MySQL очень специфичен в отношении порядка предложений в инструкции SELECT. – spencer7593