Tom Kruse: Anzeige der zwei letzten DB Einträge

Hallo alle,

ich lese über eine ASP Seite Daten aus einer DB aus. Das ist kein Problem. Allerdings möchte ich nur die zwei letzten bzw. die neuesten Einträge anzeigen lassen. Der Rest soll hinten "runterfallen". Wie lautet der Befehl dazu?

Zur Hilfe: In FP lautet der Befehl: fp_iMaxRecords=2

Nachdem ich die Features von FP 2000 bzgl. der DB Anbindung hinter mir gelassen habe, um flexibler und schmaler DB Abfragen zu gestalten, bitte ich Euch, mir eine oder zwei WEB Adressen zu nennen, wo man die wichtigsten Befehle online nachlesen kann, da ich mit der Umstellung wieder zum Laien degradiert wurde.

Ich hatte auch schon nach einem Buch gefragt - vielen Dank an alle, die mich darin unterstützt haben!!!!

Mit feundlichem Gruß

Tom

  1. Hallo alle,

    ich lese über eine ASP Seite Daten aus einer DB aus. Das ist kein Problem. Allerdings möchte ich nur die zwei letzten bzw. die neuesten Einträge anzeigen lassen. Der Rest soll hinten "runterfallen". Wie lautet der Befehl dazu?

    Zur Hilfe: In FP lautet der Befehl: fp_iMaxRecords=2

    Nachdem ich die Features von FP 2000 bzgl. der DB Anbindung hinter mir gelassen habe, um flexibler und schmaler DB Abfragen zu gestalten, bitte ich Euch, mir eine oder zwei WEB Adressen zu nennen, wo man die wichtigsten Befehle online nachlesen kann, da ich mit der Umstellung wieder zum Laien degradiert wurde.

    Ich hatte auch schon nach einem Buch gefragt - vielen Dank an alle, die mich darin unterstützt haben!!!!

    Mit feundlichem Gruß

    Tom

    Hallo,

    zuerstmal ein paar Links:
    http://www.asp-database.de
    http://http://www.aspgerman.com/aspgerman/faq/faq_liste.asp
    http://www.learnasp.com

    um die neusten Einträge anzuzeigen, solltest Du entweder nach
    der ID (Autowert, inkrement in Access) oder nach Eintragsdatum
    absteigend sortieren lassen.
    In SQL Server kannst Du dann mit "SELECT TOP 2 FROM Tabelle ..."
    die gewünschten 2 Sätze auslesen. In Access musst Du alle auslesen,
    und eine Schleife von 1..n um die Ausgabe der einzelnen Sätze legen, bzw. wenn du alle Sätze des letzten Eintragsdatums brauchst, kannst
    Du auch folgendes SQL-Statement benutzen:

    SQL = "SELECT * FROM tblTabelle WHERE tab_date = (SELECT max(tab_date) FROM tblTabelle)"

    Tschau, Stefan

    1. Hallo,

      Wenn Du im folgenden Statement [Tabelle] durch Deinen Tabellennamen, und [datum] durch eine Spalte, die die 'Neuheit' des Datensatzes angibt, ersetzt, dann ist es sogar egal, welche DB dahintersteht, und Du musst keine Schleife um alle gelieferten Datensätze legen.
      Diese Abfrage liefert dir nur die beiden letzten.

      Select * from [Tabelle]
      where [datum] = (Select max(datum) from [Tabelle])
      or [datum] = (Select max([datum]) from [Tabelle]
                      where [datum] < (Select max([datum]) from [Tabelle]))

      Sollte es sich allerdings um große Datenmengen handeln, dann wird diese Abfrage allerdings Performanceprobleme haben (gerade bei langsamen DBs)

      Volker

      1. Wenn Du im folgenden Statement [Tabelle] durch Deinen Tabellennamen, und [datum] durch eine Spalte, die die 'Neuheit' des Datensatzes angibt, ersetzt, dann ist es sogar egal, welche DB dahintersteht, und Du musst keine Schleife um alle gelieferten Datensätze legen.
        Diese Abfrage liefert dir nur die beiden letzten.

        Vorausgesetzt, in der Spalte "datum" sind nur eindeutige Werte vorhanden. Ansonsten kann die Abfrage beliebig viele Werte liefern.

        Select * from [Tabelle]

        »»  where [datum] = (Select max(datum) from [Tabelle])
        »»  or [datum] = (Select max([datum]) from [Tabelle]

        where [datum] < (Select max([datum]) from [Tabelle]))
        Sollte es sich allerdings um große Datenmengen handeln, dann wird diese Abfrage allerdings Performanceprobleme haben (gerade bei langsamen DBs)

        Dabei wird allerdings ziemlich viel doppelt berechnet.
        (Trotzdem wird diese Abfrage - unabhängig von der Datenmenge - relativ schnell ablaufen, wenn über der "datum"-Spalte ein Index liegt, am besten natürlich ein UNIQUE INDEX.)

        Einfacher wäre es,
              SELECT * from [Tabelle] ORDER BY [datum] DESC
        abzufragen und aus dem zugehörigen Cursor nur die beiden ersten Einträge zu fetchen.
        (Das ist möglicherweise sogar langsamer als die vorherige Lösung, weil vermutlich mit O(n*log(n)) sortiert werden muß.)

        Die performanteste Lösung dürfte ein normaler full table scan (SELECT * FROM tabelle) mit eigener Maximum-Berechnung sein.
        Arg viel Buchführung ist das ja nicht, jeden Wert mit zwei lokal gespeicherten Werten zu vergleichen und ggf. zu übernehmen:
          $max1 = kleiner_wert;
          $max2 = kleiner_wert;
          foreach $datum (@datumswerte)
                  {
                    if    ($datum > $max1) {$max2 = $max1; $max1 = $datum}
                    elsif ($datum > $max2) {$max2 = $datum}
                  }
        und dazu natürlich jeweils die übrigen Tabellenfelder für die beiden Maximalwerte irgendwo abspeichern.
        (Das sieht jetzt vielleicht vage aus wie Perl, soll aber keine konkrete Programmiersprache sein. ;-)