Я не думаю, что вы можете сделать это одним запросом: я бы сказал, что вам придется использовать два запроса:
Один, чтобы получить первый результат:
select *
from your_table
order by id asc
limit 1
И еще один, чтобы получить два последних результата - сортировка в противоположном направлении и получение первых двух:
select *
from your_table
order by id desc
limit 2
После этого вместовыполняя два запроса с вашего языка программирования на сервер SQL, вы могли бы отправить только один запрос, который использовал бы UNION для получения результатов обоих:
(select * from your_table order by id asc limit 1)
UNION
(select * from your_table order by id desc limit 2)
Но, подумав об этом ... не уверенна самом деле это возможно, если в каждом подзапросе есть UNION с порядком и ограничениями ...
РЕДАКТИРОВАТЬ: Я сделалтест, и кажется, что это возможно:
Вот два запроса, выполняемых независимо:
mysql> select id, title from post order by id asc limit 1;
+----+--------------+
| id | title |
+----+--------------+
| 1 | Premier post |
+----+--------------+
1 row in set (0,00 sec)
mysql> select id, title from post order by id desc limit 2;
+----+-------------------------+
| id | title |
+----+-------------------------+
| 7 | Septième post |
| 6 | Sixième post (draft=7) |
+----+-------------------------+
2 rows in set (0,00 sec)
И вот как это выглядит с UNION:
mysql> (select id, title from post order by id asc limit 1) UNION (select id, title from post order by id desc limit 2);
+----+-------------------------+
| id | title |
+----+-------------------------+
| 1 | Premier post |
| 7 | Septième post |
| 6 | Sixième post (draft=7) |
+----+-------------------------+
3 rows in set (0,03 sec)
Обратите внимание, однако, что порядок 3-х результирующих строк не очень хорошо определен ...
И, qиспользуя следующую страницу руководства MySQL 5.1: 12.2.8.3.Синтаксис UNION :
Чтобы применить ORDER BY или LIMIT к отдельному SELECT, поместите предложение в скобки, которые заключают в себе SELECT:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
Однакоиспользование ORDER BY для отдельных операторов SELECT ничего не говорит о порядке появления строк в конечном результате, поскольку UNION по умолчанию создает неупорядоченный набор строк.