SQL Abfrage
Ole
- datenbank
0 Alexa0 MichaelB0 Ole0 Michael Schröpl0 Ole
0 H-P Ortner
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-)>
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
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-)>
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
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
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-)>
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
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:
access ist vorhanden
es gibt viele leute die damit umgehen können
bei mySQl wäre das problem das viel meiner arbeitszeit dafür draufgehen würde mich mit dieser lösung auseinanderzusetzen
ferner müssten sämtliche access-daten nochmals in die mysql lösung übertragen werden, was
leider nicht immer 100% klappt und
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".
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