SQLite und ROWNUM?

M

MeGaBlitz

Neues Mitglied
0
Hallo!

Ich bin gerade an meiner ersten App am werkeln und ärgere mich ununterbrochen mit SQLite herum.

Bin schon froh das ich es geschafft habe meine Tabellen zu erstellen und mit Werten zu befüllen. Was ich jetzt jedoch vermisse ist meine geliebte Oracle-Funktion rownum. Am Besten ich erkläre euch was genau ich will:

Meine Tabelle:

ID || wert || zahl
1 || hallo || 0
2 || wer || 1
3 || hey || 0
4 || moin || 1

Nun: SELECT * FROM Tabelle WHERE zahl = 1;

ID || wert || zahl
2 || wer || 1
4 || moin || 1

Was ich nun gerne hätte wäre eine Rownum, also eine autoincrement ID des select-befehls (siehe Spalte rn)

rn || ID || wert || zahl
1 || 2 || wer || 1
2 || 4 || moin || 1

Aber wie erreiche ich so etwas? Ich hab jetzt ne Stunde herumgegooglet - ohne Ergebniss. Das Problem bei ROWID ist, dass er mir dabei 1:1 meine ID nimmt -.- Hat wer eine Idee?

Danke im Vorraus!
 
Hmm nagut keine Ideen :/

Was mir noch gekommen ist:
CREATE TABLE tabelle2 AS SELECT * FROM tabelle WHERE WERT = 1;
SELECT rowid, * FROM tabelle2

--> Das würde klappen ist jedoch weit ungemütlicher zu realisieren. Weiters bräuchte ich dann ein CREATE OR REPLACE TABLE... was es in SQLite ebenfalls nicht zu geben scheint.

Hmpf. Eine letzte Möglichkeit wäre dann eig. nur alles in Java zu realisieren und das wäre absolut ungemütlich und auch nicht sehr effizient.
 
@MeGaBlitz: Kenn zwar nichts womit du dies machen willst, aber eine frage habe ich :) warum willst du denn noch eine Row Nummerierung? Wenn du die Daten holst hast du die doch sowieso irgend in einer List oder so.
 
@hannes: Danke, könnte tatsächlich funktionieren! Werde ich gleich mal an meiner App ausprobieren :D

@surtic: Das Problem ist: Ich will mir nur einen Wert aus der Abfrage holen.
Genauer gesagt:

--> Ich hol mir eine Liste bei der die zahl 1 ist --> sehe nach wieviele Werte ich bekomme (ANZ) --> Per Zufall wird einer dieser Werte ausgelesen.
(BSP: Ich bekomme 15 Werte --> random ergibt 12 --> Lies den zwölften Wert aus)

Das scheint bei Limit zu funktionieren da Limit tatsächlich auf die Row Nummerierung zugreift. Zumindest an meiner Testdatenbank funktioniert das tadellos :D
 
hmm, so richtig hab ich es zwar noch nicht kapiert, aber wenn du zufalls-zeilen aus der DB willst geht das einfach so:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

willst du mehrere zufalls-zeilen einfach Limit erhöhen. in postgres funktioniert glaub ich sogar die gleiche syntax, in mysql heißt es glaub rand()
 
  • Danke
Reaktionen: MeGaBlitz
@MeGaBlitz: Ah so :) aber auch dann brauchst du doch gar nicht zu wissen welche Zeilen Nummer es ist. Für etwas hat man einen Count und kann es mit dem Index holen.

Und die Lösung von Tom ist sicher Top :) vor allem wird es gleich von SQL gelöst und du musst nichts in Java machen.
 
Tom299 schrieb:
hmm, so richtig hab ich es zwar noch nicht kapiert, aber wenn du zufalls-zeilen aus der DB willst geht das einfach so:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

willst du mehrere zufalls-zeilen einfach Limit erhöhen. in postgres funktioniert glaub ich sogar die gleiche syntax, in mysql heißt es glaub rand()
Wohooo top lösung :D Danke.

Meine App funktioniert auch schon... Also, zumindest am Emulator ^^

Danke euch Allen für die schnelle Hilfe!
 

Ähnliche Themen

R
Antworten
6
Aufrufe
982
swa00
swa00
Laser5001
Antworten
3
Aufrufe
629
swa00
swa00
Zurück
Oben Unten