2010-02-12 5 views
11

Je veux connaître l'alternative du mot-clé TOP comme dans MySQL. J'ai lu environ TOP dans SQL Server.Existe-t-il une alternative à TOP dans MySQL?

Existe-t-il une alternative à ceci dans MySQL, ou n'importe quelle autre méthode dans MySQL à partir de laquelle nous pouvons obtenir la même fonctionnalité?

Répondre

18

Commande et limiter les résultats:

SELECT field1, field2 
FROM myTable 
ORDER BY field1 ASC 
LIMIT 10 
+0

C'est la bonne réponse, mais vous devriez passer en revue la réponse de Pascal MARTIN pour une meilleure compréhension. – HPWD

0

oui, il y a la clause limit.

Exemple:

SELECT * FROM `your_table` LIMIT 0, 10 

Cela permet d'afficher les 10 premiers résultats de la base de données.

+0

@Pascal: le félicitant, j'aime ses réponses complètes et il est aussi rapide, pas vous mec, vous voyez je mets mon commentaire dans la réponse de pascal :) – Sarfraz

3

Vous pouvez utiliser le mot-clé LIMIT(Voir la documentation of the SELECT instruction) - il va à la fin de la requête:

select * 
from your_table 
where ... 
limit 10 

pour obtenir les 10 premières lignes


Ou encore:

select * 
from your_table 
where ... 
limit 5, 10 

Pour obtenir 10 lignes, startig à partir du 6e (c.-à-d. obtenir les lignes 6 à 15).

+0

Va-t-il manipuler toutes les données de la table ... ?? – Avinash

+1

Cet homme est toujours aussi cool et rapide avec ses réponses, l'homme des choses génial :) – Sarfraz

+0

@Avinash: Je ne suis pas sûr que je peux donner une réponse précise qui sera vrai pour chaque situation, mais, dans certains cas, il va manipuler plus de données que vous voudriez * (par exemple, quand il y a une clause 'order by', la' limite' ne peut être appliquée qu'après que le 'order by' a été calculé, évidemment) * ;;; @Sarfraz: merci ;-) –

2

Je sais que cette question a été répondue par je voudrais ajouter une certaine considération de la performance. L'opérateur TOP dans MySQL n'est pas traduit avec LIMIT.

Supposons que vous voulez obtenir les 10 dernières personnes insérées dans le db:

SELECT name, id 
FROM persons 
ORDER BY id DESC 
LIMIT 10 

Cependant cela pourrait est devenu extrêmement lent lors de l'utilisation des milliers de lignes.

Une solution beaucoup plus rapide serait de récupérer le nombre actuel X de lignes:

SELECT COUNT(*) FROM persons 

et utiliser ce numéro pour interroger les 10 derniers:

SELECT name, id 
    FROM persons 
    LIMIT x-10,10 

Donc limite sautera le premier X -10 lignes et retour les 10 suivantes. C'était 100 fois plus rapide pour moi que de trier la colonne, mais c'est juste mon expérience.

+0

Avez-vous considéré le temps passé dans 'SELECT COUNT (*) FROM persons'? –

+0

Vous ne devez pas compter sur le tri par défaut: http://stackoverflow.com/a/8746712/358813 Il est non-déterministe. – tacone