2012-03-06 18 views
11

Come posso selezionare le righe in ordine inverso (DB MySQL)?Come posso selezionare le righe in ordine inverso (mysql)

For example, 
I have a table with 12 rows (fields: id,location), I want select -4th row before a row with id = 6, 
i.e. wanted row will have id = 'not necessarily 2', 
    but there is condition - where table.location='some_location'. 

Quale dovrebbe essere il contenuto della richiesta di mysql essere come?




Editted al 30 minut successivamente.
Ecco la soluzione! Qualche esempio, ho controllato il suggerimento di drodil così:

mysql> select * from subscrs where id < 100000 order by id desc limit 4; 
+-------+--------+-----------+-------+ 
| uid | subscr | event  | id | 
+-------+--------+-----------+-------+ 
| 5307 | 5123 | feed_news | 99999 | 
| 25985 | 5211 | feed_news | 99998 | 
| 15123 | 130 | feed_news | 99997 | 
| 28368 | 19497 | feed_news | 99996 | 
+-------+--------+-----------+-------+ 
4 rows in set (0.00 sec) 

Drodil, grazie!

+3

Non sono sicuro di cosa stai cercando di ottenere selezionando una riga con un ID 4 sotto l'ID che è stato fornito. Si prega di fornire ulteriori dettagli perché penso che sia probabile che ci sia una soluzione più adatta al tuo problema. – aaroncatlin

+1

Puoi chiarire la tua domanda, magari includendo alcuni dati di esempio e come vuoi che sia ordinato? Al momento, non capisco cosa vuoi fare. –

+1

Cosa succede se il tuo ID sta incrementando automaticamente e qualcuno ha rimosso l'ID di riga 2 nel tuo caso, cosa dovrebbe fare allora? Cosa succede se l'ID fornito è 2, in modo che quattro righe precedenti avrebbero l'id -1 (non esistente)? –

risposta

20

Oppure si potrebbe farlo senza preoccuparsi dei risultati cancellati, solo ottenere la quarta prima della id data (6) da:

SELECT * FROM SomeTable WHERE id < 6 ORDER BY id DESC LIMIT 4,1 
2

La 4a riga prima di una data riga o il 4o ID prima di un dato ID? Potrebbero esserci degli ID mancanti a causa di record cancellati (ad esempio, ID 101, 102, 104, 105, 111, ...) ... Se si desidera solo un ID 4 in meno di qualche altro ID per qualsiasi motivo (concordo maggiori informazioni dovrebbe essere data qui, come c'è probabilmente una soluzione migliore!) allora si può semplicemente fare

SELECT * FROM SomeTable WHERE ID=6-4 

È possibile espandere su che se si desidera che l'ID 4 meno l'ID della riga che contiene una posizione specifica con

SELECT * FROM SomeTable WHERE ID = (SELECT ID FROM SomeTable WHERE Location='Germany')-4 

Ma ancora una volta, si prega di condividere alcuni dati di esempio e che cosa si sta cercando di ottenere/perché hai intenzione di farlo in questo modo - questa non è una soluzione logica. Se l'ID 2 è stato cancellato, o se il tuo campo Posizione non contiene dati univoci, allora questo si interromperà. Ci deve essere un design migliore per quello che stai cercando di fare, ma è necessario fornire maggiori dettagli per questo.

+0

Ho inviato una risposta simile all'inizio, ma poi l'ho rimosso di nuovo perché si sarebbe rotto in diversi casi. Vedi il mio commento alla domanda. –

+0

Sì, sono certamente d'accordo: l'utente deve avere uno stretto controllo sul DB perché funzioni, e anche in questo caso è un modo terribile di fare/affrontare le cose. Ma per quanto posso capire la domanda con ciò che è fornito, questo sembra essere quello che sta chiedendo. – maxx233

+0

scusa, non ho spiegato completamente! Vedi la domanda modificata qui sopra! –

1

se il mio mindreading sta ancora lavorando, probabilmente avete bisogno di qualcosa di simile:

select t1.location, t2.location 
from mytable t1 
join mytable t2 on t2.id = t1.id - 4 
where t1.location = 'some_location' 
1

Aggiungere ORDER BY id DESC nell'ultima query per recuperare i dati dall'ultimo al primo.

O

Per ordine si può semplicemente aggiungere ORDER BY id ASC assenso.