Je ne pense pas que vous pouvez le faire avec une seule requête: Je dirais que vous devez utiliser deux requêtes:
One, pour obtenir le premier résultat:
select *
from your_table
order by id asc
limit 1
et un autre pour obtenir les deux derniers résultats - le tri dans le sens inverse et d'obtenir les deux premiers on va faire l'affaire:
select *
from your_table
order by id desc
limit 2
Après cela, au lieu de faire deux demandes de votre langage de programmation au serveur SQL, vous pouvez envoyer une seule requête, qui utiliserait une union pour obtenir les résultats des deux:
(select * from your_table order by id asc limit 1)
UNION
(select * from your_table order by id desc limit 2)
Mais, penser ... pas sûr que cela est effectivement possible, avoir une union avec l'ordre par les limites et dans chaque sous-requête ...
EDIT: Je l'ai fait la test, et il est semble qu'il est possible:
Voici les deux requêtes, exécutées indépendamment:
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)
Et voici à quoi il ressemble avec l'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)
Notez, cependant, que l'ordre des 3 lignes résultantes n'est pas très bien défini ...
Et, en citant la page de manuel suivante de MySQL 5.1: 12.2.8.3. UNION Syntax:
Pour appliquer ORDER BY ou LIMIT à un individuel SELECT, placez la clause dans les parenthèses qui enferment 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);
Cependant, l'utilisation de ORDER BY pour les instructions SELECT individuelles n'impliquent rien dans l'ordre dans lequel les lignes apparaissent dans le résultat final car UNION produit par défaut un ensemble de lignes non ordonnées .
Vous ne pouvez pas union avec différentes sortes. –
Merci! Je vais éditer. – John