2015-02-14 2 views
0

В таблице mysql с «R-строками» я хочу выбрать следующие «m строк» ​​после «n-й строки» таким образом, что если n + m> R возвращает строки Rn из конца таблицы и строки m + nR с начала таблицы.выбор следующих m строк после номера строки n в таблице mysql

, например, в этой таблице:

id firstname 
1 john 
2 robert 
3 bob 
4 adam 
5 david 

Я хочу, чтобы получить следующие 4 строки после номера строки 3 (боб), таким образом:

4 adam 
5 david 
1 john 
2 robert 

Я искал много и нашел что следующий запрос просто возвращает последние 2 строки.

SELECT * FROM table LIMIT 4 OFFSET 3; 

Я знаю, что я могу реализовать этот конкретный запрос с использованием PHP и кучу условных операторов, но я хотел бы знать, был ли он реализован в MySQL или нет?

+0

Нет, это не было реализовано в MySQL (напрямую), потому что это слишком специфичный и необычный запрос. – CBroe

ответ

0

Один из подходов заключается в использовании union all в подзапросе. Это позволяет «дублировать» таблица с вновь вычисленной ид в конце таблицы:

select t.* 
from ((select t.*, id as newid from table t) union all 
     (select t.*, id + cnt as newid 
     from table t cross join 
      (select count(*) as cnt from table) cnt 
    ) 
    ) t 
order by newid 
limit 4 offset 3; 

Для небольших таблиц, то это должно быть хорошо. Для больших таблиц вы, вероятно, не хотите этого делать, потому что MySQL материализует подзапрос - добавление служебных данных для обработки запроса.

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