2016-03-27 5 views
1

Я пытаюсь запустить запрос, который будет SELECT все, кроме 5 элементов в моей таблице.SELECT все, кроме последних 5 элементов в MySQL

В настоящее время я использую следующий запрос, чтобы получить последние 5 элементов.
SELECT * FROM articles ORDER BY id DESC LIMIT 5

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

ответ

2

Вы выбираете последние 5 пунктов, удобно сортируя их в обратном порядке.

SELECT * FROM articles ORDER BY id DESC LIMIT 5 

LIMIT 5 является, по сути, короткая форма LIMIT 0, 5.

Вы можете использовать один и тот же трюк, чтобы пропустить первые 5 пунктов и выбрать остальные из них:

SELECT * FROM articles ORDER BY id DESC LIMIT 5, 1000000 

К сожалению, MySQL не обеспечивает способ получить все строки после того, как он пропускает первые 5 строк , Вы должны всегда указывать, сколько строк нужно вернуть. Вместо этого я поставил большое число (1 миллион) в запросе.

Для обоих запросов возвращенные статьи будут отсортированы в порядке убывания. Если вы нуждаетесь в них в порядке возрастания можно сохранить наименьшее значение id возвращенного первого запроса и использовать его во втором запросе:

SELECT * FROM articles WHERE id < [put the saved id here] ORDER BY id ASC 

Там нет необходимости для предела на втором запросе, и вы можете даже сортируйте записи по другим столбцам, если вам нужно.

+0

Спасибо! Это очень помогло. Отличное объяснение! – Chris

1

Вы можете сделать это следующим образом:

SELECT * FROM articles 
ORDER BY id ASC 
LIMIT (SELECT count(*)-5 FROM articles) 

Вы также можете использовать NOT EXISTS() или NOT IN(), но мне нужно будет увидеть имена колонок, чтобы настроить sql для вас, например:

SELECT * FROM articles a 
WHERE a.id NOT IN(SELECT id FROM articles ORDER BY id DESC LIMIT 5) 

Может быть сделано с левой присоединиться:

SELECT t.* FROM articles t 
LEFT JOIN (SELECT id FROM articles ORDER BY id DESC LIMIT 5) s 
ON(t.id = s.id) 
WHERE s.id is null 

Обратите внимание, что, если таблица имеет более одного ключа (ID столбца), вы должны добавить его к отношениям пункта ON.

+0

Я попытался с помощью верхнего запроса, говорит, что есть ошибка в запросе – Chris

+0

использовать один @ Крис из нижних (левого соединения, а не в) – sagi

+0

Первый запрос не выполняется , Это объясняется в [документации] (http://dev.mysql.com/doc/refman/5.7/en/select.html): * «LIMIT» принимает один или два числовых аргумента, которые должны быть неотрицательными целыми числами константы «. – axiac

0

Попробуйте

SELECT * FROM articles a NOT EXIST (SELECT * FROM articles b WHERE a.id=b.id ORDER BY id DESC LIMIT 5); 
Смежные вопросы