2010-04-25 12 views
15

Est-il possible d'écrire une requête pour utiliser la même "LIMIT (from), (count)", mais obtenir un résultat vers l'arrière?Limite inférieure de MySQL par ordre décroissant

Dans l'exemple si j'ai 8 lignes dans la table et je veux obtenir 5 rangs en deux étapes je: première étape requête:

select * from table limit 0, 5 

premier résultat de l'étape:

first 5 rows; 

deuxième étape requête:

select * from table limit 5, 5 

deuxième étape résultats:

last 3 rows; 

Mais je veux l'obtenir vice versa. Je veux dire dès la première étape, je veux 3 dernières lignes et à partir de la seconde je veux 5 premières lignes. Je vous remercie de votre réponse

Répondre

24

Non, vous ne devriez pas le faire. Sans clause ORDER BY vous ne devez pas compter sur l'ordre des résultats étant les mêmes d'une requête à l'autre. Cela pourrait bien fonctionner pendant les tests mais l'ordre est indéterminé et pourrait casser plus tard. Utilisez une commande par.

SELECT * FROM table1 ORDER BY id LIMIT 5 

Par ailleurs, une autre façon d'obtenir les 3 dernières lignes est d'inverser l'ordre et sélectionnez les trois premières lignes:

SELECT * FROM table1 ORDER BY id DESC LIMIT 3 

Ce sera toujours travailler même si le nombre de lignes dans la jeu de résultats ne sont pas toujours 8.

+0

en effet. Backward n'a aucune signification si le résultat n'est pas commandé. – extraneon

+0

donc par ordre s'applique avant limite? – faya

+0

@faya: Dans un cas simple comme celui-ci, oui. –

0

oui, vous pouvez échanger ces 2 requêtes

select * from table limit 5, 5 

select * from table limit 0, 5 
0

de cette façon, est relativement plus facile

SELECT doc_id,serial_number,status FROM date_time ORDER BY date_time DESC LIMIT 0,1; 
Questions connexes