2013-12-07 5 views
0

Я пытаюсь создать запрос mysql для выбора, скажем, 5 строк до и 5 строк в зависимости от идентификатора текущей валюты. Вот вопрос, который я пытаюсь использовать:mysql select n строк до и n строк после

SELECT * FROM posts WHERE PID<='10' ORDER BY PID DESC LIMIT 7 
UNION ALL 
SELECT * FROM posts WHERE PID>'10' ORDER BY PID ASC LIMIT 6 

По какой-то причине запрос не работает. Я что-то упускаю? Я нашел это решение на форуме.

+0

Вам нужно обернуть их в круглые скобки, если вы собираетесь сделать это таким образом - и, я думаю, первым нужен псевдоним. – Strawberry

+1

Являются ли PIDs последовательными? Затем предварительно рассчитайте диапазон и просто получите одно предложение WHERE pid BETWEEN (10-5) AND (10 + 5). – mario

+0

что не работает? –

ответ

1

Попробуйте это:

(SELECT * 
FROM posts 
WHERE PID <= '10' 
ORDER BY PID DESC LIMIT 7 
) 
UNION ALL 
(SELECT * 
FROM posts 
WHERE PID > '10' 
ORDER BY PID ASC LIMIT 6 
) 
ORDER BY PID ASC; 

sqlfiddle demo

1

PID, скорее всего, из INT типа. Таким образом, вы должны использовать следующее (SQL Fiddle):

(SELECT * FROM posts WHERE PID <= 10 ORDER BY PID DESC LIMIT 7) 
UNION ALL 
(SELECT * FROM posts WHERE PID > 10 ORDER BY PID ASC LIMIT 6) 

Как вы можете видеть упорядочение двух запросов также поддерживается отдельно.

0

DOCS

Чтобы применить ORDER BY или LIMIT к отдельному SELECT, поместите положение внутри скобок, заключающих ВЫБОР:

Смежные вопросы