2010-02-12 7 views
11

Voglio conoscere l'alternativa della parola chiave TOP come in MySQL. Ho letto su TOP in SQL Server.Esiste un'alternativa a TOP in MySQL?

Esiste un'alternativa a questo in MySQL o in qualsiasi altro metodo in MySQL da cui è possibile ottenere la stessa funzionalità?

risposta

18

Ordine e limitano i risultati:

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

Questa è la risposta giusta ma dovresti rivedere la risposta di Pascal MARTIN per una comprensione più profonda. – HPWD

0

sì, c'è la clausola limit.

Esempio:

SELECT * FROM `your_table` LIMIT 0, 10 

Questo mostrerà i primi 10 risultati dal database.

+0

@Pascal: lodandolo, mi piacciono le sue risposte esaustive ed è anche veloce, non tu uomo, vedi che ho messo il mio commento nella risposta di Pascal :) – Sarfraz

3

È possibile utilizzare la parola chiave LIMIT(Vedere la documentation of the SELECT instruction) - va alla fine della query:

select * 
from your_table 
where ... 
limit 10 

per ottenere le prime 10 linee


O anche:

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

Per ottenere 10 righe, startig dal 6 (ad es. ottenere le linee dalla 6 alla 15).

+0

Intende manipolare tutti i dati del tavolo ... ?? – Avinash

+1

Quest'uomo è sempre così bello e veloce con le sue risposte, ottimo uomo di roba :) – Sarfraz

+0

@Avinash: Non sono sicuro di poter dare una risposta definitiva che sarà vera per ogni situazione, ma, in alcuni casi, manipolerà più dati desiderati * (ad esempio, quando esiste una clausola 'order by', il' limite' può essere applicato solo dopo che è stato calcolato 'order by', ovviamente) * ;;; @Sarfraz: grazie ;-) –

2

So che questa domanda ha ricevuto risposta da vorrei aggiungere qualche considerazione delle prestazioni. L'operatore TOP in MySQL non è tradotto con LIMIT.

Si supponga di voler ottenere gli ultimi 10 persone inserite nel db:

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

Tuttavia, questo potrebbe è diventato estremamente lento quando si utilizza migliaia di righe.

Una soluzione molto più veloce sarebbe recuperare il numero corrente X di righe:

SELECT COUNT(*) FROM persons 

e l'uso che il numero di interrogare per l'ultimo 10:

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

Così limite salterà la prima X -10 righe e restituire il prossimo 10. Questo è stato 100 volte più veloce per me che ordinare la colonna, ma questa è solo la mia esperienza.

+0

Hai considerato il tempo trascorso in 'SELEZIONA CONTE (*) DA persone? –

+0

Non si deve fare affidamento sull'ordinamento predefinito: http://stackoverflow.com/a/8746712/358813 Non è deterministico. – tacone