Announcement

Collapse
No announcement yet.

Tabelle rückwärts durchsuchen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hallo mr.fix,

    ich kann mich dem Post von dimitri nur anschließen. Das was du willst geht schlichtweg am Grundgedanken moderner DBMS und SQL vorbei.
    Ein Weg dein Vorhaben umzusetzen ist aus meiner Sicht eine Spalte mit einer eindeutigen, lückenlos fortlaufenden Nummer. Anhand dieser kannst du sehr effizient die "letzten" 10 (MAX - 10) Datensätze identifizieren. Nachteil dabei ist natürlich, das du bei jedem Delete diese Nummer für u.U. sehr viele DS aktualisieren mußt.
    Oder du legst dir eine zusätzliche Tabelle an, in der du die letzten 10 PKs abspeicherst - quasi als der genannte Stack. Ob die Abfrage letztendlich performanter ist, als wenn du die DB einfach ihren Job machen läßt, sei dann mal dahingestellt.
    Es ist also in jedem Fall ZUSÄTZLICHER Verwaltungsaufwand notwendig um den oder die letzten Datensätze zu kennen und auf den verzichtet ein modernes DBMS eben.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #17
      Vielen Dank! MAX und TOP kann sqlite leider nicht.

      Das macht was ich will:

      SELECT * FROM tabelle WHERE func(key) AND val='a' ORDER BY key DESC LIMIT 2

      Der Knackpunkt ist, dass die ORDER-BY-Klausel ein Primary-Key-Feld enthalten muss.

      Mit "func" stelle ich bloß fest, was die Datenbank macht. Sie sucht nur solange nach val='a' bis sie 2 Datensätze zusammen hat und fängt beim letzten Datensatz an. 'val' kann auch '=b' sein, deshalb wird func() u.U. öfter als 2 mal angesprungen. Es wird jedenfalls nicht die ganze Tabelle durchsucht.

      Comment


      • #18
        Die ORDER BY-Klausel bezieht sich offensichtlich nicht auf die gefundnen Datensätze, wie ich dachte, sondern auf alle vorhandenen. Wenn ich die Select-Anweisung oben mit "ORDER BY val" ausführe (val ist kein primary key) wird die gesamte Tabelle durchsucht. Denn die Datenbak kann bei einem nichtindizierten Feld ja nicht wissen, ob nicht nicht noch ein größerer Wert vorkommt.
        Zuletzt editiert von mr.fix; 14.08.2010, 22:10.

        Comment

        Working...
        X