come ottenere rowNum come colonna in sqlite IPHONE

Ho una tabella di database Sqlite come questa ( senza ascendente )

inserisci la descrizione dell'immagine qui

Ma ho bisogno di riattaccare la tabella in ordine crescente per nome , quando lo imposto in ordine crescente il rowId cambia come segue in ordine confuso

inserisci la descrizione dell'immagine qui

Ma ho bisogno di recuperare un numero limitato di contatti 5 in ordine crescente ogni volta

come Aaa – Eeee e poi Ffff- Jjjjj ……

ma per vedere ** t limiti come 0-5 5-10 …. ** è in grado di usare le rowids poiché sono in ordine jumble

Quindi ho bisogno di un’altra colonna come (rowNum in oracle) che è nell’ordine 1234567 … ogni volta come segue

inserisci la descrizione dell'immagine qui

come ritriggersre quella colonna con colonne esistenti

Note: WE DONTE HAVE ROWNUM LIKE COLUMN IN SQLITE

Questo è un modo di simulare un RowNum, spero che aiuti:

 SELECT (SELECT COUNT(*) FROM Names AS t2 WHERE t2.name < t1.name ) + ( SELECT COUNT(*) FROM Names AS t3 WHERE t3.name = t1.name AND t3.id < t1.id ) AS rowNum, id, name FROM Names t1 ORDER BY t1.name ASC 

Esempio di SQL Fiddle

La finta soluzione rownum è intelligente, ma temo che non si adatti bene (per query complesse devi unire e contare su ogni riga il numero di riga prima della riga corrente).

Prenderò in considerazione l’utilizzo di create table tmp as select /*your query*/ . perché nel caso di un’operazione di creazione come selezione il rowid creato quando si inseriscono le righe è esattamente quello che sarebbe il rownum (un contatore). È specificato dal documento SQLite.

Una volta che la query iniziale è stata inserita, è sufficiente interrogare la tabella tmp:

 select rowid, /* your columns */ from tmp order by rowid 

Puoi usare offset / limite.

Ottieni il primo, il secondo e il terzo gruppo di cinque righe:

 select rowid, name from contactinfo order by name limit 0, 5 select rowid, name from contactinfo order by name limit 5, 5 select rowid, name from contactinfo order by name limit 10, 5 

Attenzione, l’uso della syntax precedente richiede a SQLite di leggere tutti i record precedenti in ordine ordinato. Quindi per ottenere il 10 ° record per l’istruzione numero 3 sopra SQLite ha bisogno di leggere i primi 9 record. Se si dispone di un numero elevato di record, ciò può essere problematico dal punto di vista delle prestazioni.

Maggiori informazioni sul limite / offset:

Ottimizzazione della query Sqlite (utilizzando Limite e Offset)

Query Sqlite LIMIT / OFFSET