Seleziona le ultime N righe da MySQL


121

Voglio selezionare le ultime 50 righe dal database MySQL all'interno della colonna denominata id che è la chiave primaria . L'obiettivo è che le righe dovrebbero essere ordinate per id in ordine ASC , ecco perché questa query non funziona

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

Inoltre è notevole che le righe possano essere manipolate (eliminate) ed è per questo che anche la seguente query non funziona

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

Domanda : come è possibile recuperare le ultime N righe dal database MySQL che possono essere manipolate ed essere in ordine ASC?

Risposte:


236

Puoi farlo con una sottoquery:

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

Questo selezionerà le ultime 50 righe da tablee quindi le ordinerà in ordine crescente.


5
^ Cordiali saluti, so che questo articolo riguarda MySQL, ma volevo avvisare che in risposta al commento di @ DiegoDD sopra, l'omissione della selezione esterna e dell'alias non sembra funzionare in Postgres (9.3.5). Ricevo un "Errore: più clausole ORDER BY non consentite". La risposta accettata, tuttavia, funziona come previsto a Postgres
allenwlee

Grazie per questo! Questa domanda mi ha aiutato a risolvere il mio problema. Lo stavo cercando da ore
Arshad,

1
Come posso applicare questa query con JOINS?
GYaN

@GYaN aggiunge join nella sottoquery interna
sheikh hamza

9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

Se hai un campo data che memorizza la data (e l'ora) in cui è stata inviata la chat o qualsiasi campo riempito con dati incrementali (ordine per DESC) o desincrementali (ordine per ASC) per riga, inseriscili come seconda colonna su quali dati dovrebbero essere ordinati.

Questo è quello che ha funzionato per me !!!! spero che possa aiutare !!!!


7
SELECT * FROM table ORDER BY id DESC LIMIT 50

salva risorse fai una query, non c'è bisogno di fare query annidate


1
La tua query restituirà i risultati al contrario (ID discendente). La query di @ newfurniturey otterrà le ULTIME righe inserite ( LIMITing su ID discendente) e il risultato finale avrà ID crescenti.
Robin Kanters,

1
La tua soluzione non otterrà i risultati nell'ordine giusto, invece li farà invertire, quindi la necessità di un altro ordine per riportarli nell'ordine giusto
Cobra47

1
Ma poi fai semplicemente un php array_reverse () o qualunque sia l'equivalente nel tuo linguaggio di scripting preferito. Il database non ha bisogno di fare quel lavoro.
Joe

6
@ Joe Non c'è nulla nella domanda che indichi che viene utilizzato un linguaggio di scripting, quindi non è un'ipotesi sicura da fare.
Nick Coons

La risposta attesa dovrebbe già essere ordinata utilizzando solo la query del database.
d4ryl3

-2
select * from Table ORDER BY id LIMIT 30

Note: * iddovrebbe essere unico. * È possibile controllare il numero di righe restituite sostituendo 30nella query


1
Potresti spiegare la tua soluzione? La spiegazione tra parentesi sembra essere codice, metti un'intera frase sopra / sotto il codice. Grazie
deHaar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.