![]() |
SQL Abfrage
Hallo,
ich möchte gern in einer Datenbank nach einem Wert suchen lassen, ist er vorhanden, soll der Datensatz als auch der dem Wert entsprechende vorhergehende als der Nachfolger angezeigt werden. Wenn der Wert nicht gefunden wird, sollen aber auch Vorgänger und Nachfolger angezeigt werden. Zur Verfügung hab ich MSSQL und DelphiADO Zur Erklärung: Meine DB sieht etwas so aus: ID Wert 1 10 2 20 3 30 4 50 5 40 6 60 Ich kann also nicht einfach sagen: "Suche Wert, nimm DS mit ID+/-1" Ich muß quasi erstmal meine Daten sortieren, dann suchen und dann das Umfeld ausgeben lassen. Nur wie? |
Re: SQL Abfrage
Zitat:
SQL-Code:
Syntax ohne Gewähr. "Between" auch. :mrgreen:
SELECT * FROM BLA WHERE ID BETWEEN (:ID-1 AND ID+1);
|
Re: SQL Abfrage
Zitat:
Macht aber nichts, soweit war ich vor ein paar Wochen schon. Da find ich schon eine andere Lösung, so wie damals. |
Re: SQL Abfrage
naja, deine sql abfrage müsste dann einfach alles abfragen und sortiert zurück geben
SQL-Code:
mit TQuery.First, TQuery.Next etc. kannst du dann die ergebnisse durchgehen und nach deinem wert suchen. Wenn du diesen gefunden hast kannst du mit TQuery.Next den nachfolgenden Wert ermitteln und mit TQuery.Prior den davor liegenden Wert. Ob TQuery in Zusammenhang mit Ado geht weiß i leider nicht aber da wirds mindestens ähnliche Wege geben.
select * from YOURTABLE order by ID ASC
|
Re: SQL Abfrage
Zitat:
|
Re: SQL Abfrage
Das sollte man auch hinn bekommen. Wenn du die Abfrage durchgeführt hast (muss nichtmal sortiert sein) dann kannst du die ergebnisse ja einfach durchgehen und danach suchen.
Delphi-Quellcode:
Das ganze ist nur PseudoCode der veranschaulichen soll wie das ganze funktioniert, kann also nicht eins zu eins abgetippt werden und soll somit auch nur als denkanstoß dienen (hoffe ich hab kein Denkfehler dabei)
var LDavor, LDahinter, LTreffer, LCount: Integer;
begin LDavor := -1; LDahinter := -1; LTreffer := -1; for LCount := 0 to GefundeneDatensaetze.count - 1 do begin if (LDavor = -1) or ((GefundeneDatensaetze[LCount].ID > LDavor) and (GefundeneDatensaetze[LCount].ID < GesuchteID)) then LDavor := GefundeneDatensaetze[LCount].ID; if (LDahinter = -1) or ((GefundeneDatensaetze[LCount].ID < LDahinter) and (GefundeneDatensaetze[LCount].ID > GesuchteID)) then LDahinter := GefundeneDatensaetze[LCount].ID; if GefundeneDatensaetze[LCount].ID = gesuchteID then LTreffer := gesuchteID; end; end; |
Re: SQL Abfrage
Hmm. Ich glaube Du bist zu sehr auf die ID fixiert. Die ID hilft mir nichts, da sie in keinem Zusammenhang mit den Werten steht, es mir aber um die Werte geht.
|
Re: SQL Abfrage
Dann musst du eben ID durch den anderen Spaltenwert ersetzen, es geht ja nur um das funktionsprinzip, das letztendliche proggen musst du eh selbst.
|
Re: SQL Abfrage
Zitat:
Dann kann ich aber wiederrum nicht mit +1 und -1 arbeiten. Ich schau mir grad eh eine SQL basierte Lösung an, damit ich das ganze auch gleich für ASP verwenden kann. |
Re: SQL Abfrage
Du mußt zuerst mal sagen, von welchem Kriterium es abhängt, was "davor" oder "dahinter" bedeutet. Wenn es sich nicht um die ID handelt, was dann ?
Zitat:
Ich will damit sagen, daß die Fragestellung so unpräzise ist, daß wohl niemand etwas damit anfangen kann. Wie es aussieht gilt das mittlerweile auch für die DB. 8) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz