Ole: SQL Abfrage

hi

ich habe eine datenbank und muss für diese eine abfrage basteln.
Ziel des ganzen soll sein, das nur der datensatz aus der datenbank gelesen wird der auch wirklich benötigt wird.

ginge im prinzip ja ganz einfach wenn mir der wert eines felder bekannt wäre mit:

SELECT id, Texte_GB, Texte_DE from texte where id = bla ORDER BY id

nun ist das allerdings so, das ich keinen wert vorher kenne.
bisher behelfe ich mir mit folgendem konstrukt:

SELECT id, Texte_GB, Texte_DE FROM texte ORDER BY id

ferner definiere ich mir noch 2 varibablen START und ANZAHL
was ja bekanntlich erstmal alle datensätze aus der DB ausliesst und sie mir nach id ortnet.

Im zweiten schritt lass ich mir die datensätze ausgeben indem ich sage das er mir mit dem datensatz START beginnen soll und mir ANZAHL an datensätzen anzeigen soll.

nachteil der ganzen geschichte ist, das ich immer alle datensätze lade...bei einer db mit über 100mb dauert das schon ein wenig.

Wie ich den ersten und den letzen wert bekomme ist mir schon klar:

SELECT min(id) FROM texte
SELECT max(id) FROM texte

den min-wert brauch ich ja für den start.
wie kann ich denn nun sagen, das ich nur den nächstgrößeren (vom aktuellen) oder nächstkleineren wert haben möchte?

sobald ich die erste seite aufrufe bekomme ich ja den kleinsten id wert.
wie geht es an der stelle weiter?
ferner hab ich noch keinen plan davon wie ich sagen kann "springe zum hundersten wert".

für hilfe wäre ich dankbar :)

alles liebe
ole
(8-)>

  1. ferner hab ich noch keinen plan davon wie ich sagen kann "springe zum hundersten wert".

    Hallo,

    Du kannst z.B. sagen, dass die ersten hundert Zeilen ausgegeben werden sollen und davon nimmst Du dann den letzen

    Gruss Alexa

    1. hi alexa

      Du kannst z.B. sagen, dass die ersten hundert Zeilen ausgegeben werden sollen und davon nimmst Du dann den letzen

      die idee ist im prinzip nicht schlecht. allerdings ist das bei einer datenbank mit >50000 datensätzen etwas ungünstig, da ich wenn ich auf daten satz 50000 zugreifen will alle 50000 erst alden müsste.

      trotzdem danke :)

      alles liebe
      ole
      (8-)>

      1. die idee ist im prinzip nicht schlecht. allerdings ist das bei einer datenbank mit >50000 datensätzen etwas ungünstig, da ich wenn ich auf daten satz 50000 zugreifen will alle 50000 erst alden müsste.

        kannst Du vielleicht ein bisschen umschreiben, welchen Datensatz Du genau brauchst?

        Gruss Alexa

  2. Hallo,

    Welche Datenbank verwendest Du (SQL ist leider nämlich nicht gleich SQL und gerade für den Fall machen sich die "Spezialkonstrukte" wie TOP oder ROWNO ganz gut) ?

    Gruss
       MichaelB

    1. hi Michael

      Welche Datenbank verwendest Du (SQL ist leider nämlich nicht gleich SQL und gerade für den Fall machen sich die "Spezialkonstrukte" wie TOP oder ROWNO ganz gut) ?

      aus kostengründen steht mir leider nur access2000 zur verfügung, was ich somit auch gezwungen bin zu verwenden :).

      alles liebe
      ole
      (8-)>

      1. Hi Ole,

        aus kostengründen steht mir leider nur access2000 zur
        verfügung, was ich somit auch gezwungen bin zu verwenden :).

        seit wann ist ein proprietäres M$-Produkt preisgünstiger als ein gut dokumentiertes, kostenloses Open-Source-System wie mySQL?

        Viele Grüße
              Michael

        1. hi Michael

          zynismuss bringt mich kein stück weiter mit meinem problem.

          preisgünstiger ist es für die firma für die ich arbeite aus mehreren gründen:

          1. access ist vorhanden

          2. es gibt viele leute die damit umgehen können

          3. bei mySQl wäre das problem das viel meiner arbeitszeit dafür draufgehen würde mich mit dieser lösung auseinanderzusetzen

          4. ferner müssten sämtliche access-daten nochmals in die mysql lösung übertragen werden, was

          5. leider nicht immer 100% klappt und

          6. diese dadurch immer kontrolliert werden müssten.

          ferner möchte ich dich hier nach mal auf folgend FAQ hinweisen http://forum.de.selfhtml.org/faq/#Q-04

          alles liebe
          ole
          (8-)>

          ps: diese prediger postinges bringen keinem etwas und verbreiten nur schlechte laune. wie wärs zur abwechslung mal mit einem "aha, gut ist vieleicht nicht die lösung die ich nehmen würde, aber das was du vorhast funktioniert so und so".

  3. Hi!

    ich habe eine datenbank und muss für diese eine abfrage basteln.
    Ziel des ganzen soll sein, das nur der datensatz aus der datenbank gelesen wird der auch wirklich benötigt wird.
    ginge im prinzip ja ganz einfach wenn mir der wert eines felder bekannt wäre ..

    ferner definiere ich mir noch 2 varibablen START und ANZAHL
    Im zweiten schritt lass ich mir die datensätze ausgeben indem ich sage das er mir mit dem datensatz START beginnen soll und mir ANZAHL an datensätzen anzeigen soll.

    nachteil der ganzen geschichte ist, das ich immer alle datensätze lade...bei einer db mit über 100mb dauert das schon ein wenig.

    Wie ich den ersten und den letzen wert bekomme ist mir schon klar:

    SELECT min(id) FROM texte
    SELECT max(id) FROM texte

    den min-wert brauch ich ja für den start.
    wie kann ich denn nun sagen, das ich nur den nächstgrößeren (vom aktuellen)  oder nächstkleineren wert haben möchte?

    Deine Angaben sind eher allgemein - daher kann ich Dir auch nur einen allgemeinen Hinweis anbieten:
    Du benötigst auch eine Variable AKTUELL die Du dann in der SQL-Abfrage verwendest:

    Mit
    SELECT min(id) FROM texte WHERE id > aktuell
    erhältst du den Nächstgrösseren
    Mit
    SELECT max(id) FROM texte WHERE id < aktuell
    erhältst du den Nächstkleineren

    Um die nächsten 100 Datensätze ganz zu erhalten kannst Du also mit einer Unterabfrage und dem Prädikat TOP arbeiten:
    SELECT TOP anzahl, id, Texte_GB, Texte_DE FROM texte WHERE id = (SELECT min(id) FROM texte WHERE id > aktuell)

    Die Variablen ANZAHL und AKTUELL musst Du natürlich übergeben.

    alles liebe
    ole
    (8-)>

    Hoffe ich konnte einen Hinweis geben

    H-P Ortner