SQLite und ROWNUM?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von MeGaBlitz, 06.09.2011.

  1. MeGaBlitz, 06.09.2011 #1
    MeGaBlitz

    MeGaBlitz Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2010
    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!
     
  2. MeGaBlitz, 07.09.2011 #2
    MeGaBlitz

    MeGaBlitz Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2010
    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.
     
  3. hannes1608, 07.09.2011 #3
    hannes1608

    hannes1608 Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    2
    Registriert seit:
    21.07.2011
    MeGaBlitz bedankt sich.
  4. surtic, 07.09.2011 #4
    surtic

    surtic Fortgeschrittenes Mitglied

    Beiträge:
    252
    Erhaltene Danke:
    14
    Registriert seit:
    12.04.2010
    @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.
     
  5. MeGaBlitz, 07.09.2011 #5
    MeGaBlitz

    MeGaBlitz Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2010
    @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
     
  6. Tom299, 08.09.2011 #6
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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()
     
    MeGaBlitz bedankt sich.
  7. surtic, 08.09.2011 #7
    surtic

    surtic Fortgeschrittenes Mitglied

    Beiträge:
    252
    Erhaltene Danke:
    14
    Registriert seit:
    12.04.2010
    @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.
     
  8. MeGaBlitz, 08.09.2011 #8
    MeGaBlitz

    MeGaBlitz Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2010
    Wohooo top lösung :D Danke.

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

    Danke euch Allen für die schnelle Hilfe!
     

Diese Seite empfehlen