Einzelnen Beitrag anzeigen

idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 11:18
Delphi-Quellcode:
      $query = "SELECT * FROM adressen
               WHERE
                  (gesch_firma > ( SELECT gesch_firma FROM adressen WHERE id = $id ))
               OR
                  (name > ( SELECT name FROM adressen WHERE id = $id ))
               OR
                  (vorname > ( SELECT vorname FROM adressen WHERE id = $id ))
               ORDER BY gesch_firma, name, vorname ASC limit 0,1";
So kann das nicht gut gehen:

der 1. Teil des where liefert alle Datensätze, in denen gesch_firma grösser als im aktuellen Datensatz ist.
der 2. Teil liefert ALLE Datensätze, in denen name grösser als im aktuellen Datensatz ist, aber natürlich auch jene, in denen gesch_firma kleiner als im aktuellen Datensatz ist.
Im 3. Teil werden dann noch ALLE Datensätze geliefertt, bei denen der Vorname grösser ist. Damit erhältst du aber eine Menge Sätze, die laut aktueller Sortierfolge vor dem aktuellen Datensatz liegen.

Prinzipiell müsste eine Bedingung bei drei Sortierkriterien a,b und c in etwa so aussehen:

where (a>a0) or ((a=a0) and (b>b0)) or ((a=a0) and (b=b0) and (c>c0))

Zitat:
Zu beachten ist, dass nicht immer alle Felder (gesch_firma, name, vorname) einen Wert haben, also leer sein können.
Wenn Du damit meinst, dass der Wert ein leerer String sein kann, dann ist es egal. Der leere String liegt in der Sortierfolge vor jedem anderen String. Wenn allerdings Werte NULL sein können, wird es wesentlich komplizierter, weil das Ergebnis jedes Vergleichs, in den der Wert NULL involviert ist, als Ergebnis wieder NULL liefert.

Geändert von mkinzler ( 8. Jun 2010 um 12:09 Uhr) Grund: Code-Tag -> Delphi-Tag
  Mit Zitat antworten Zitat