AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zum nächsten Datensatz springen
Thema durchsuchen
Ansicht
Themen-Optionen

Zum nächsten Datensatz springen

Ein Thema von Luckie · begonnen am 8. Jun 2010 · letzter Beitrag vom 9. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 09:53
Wer zur Sicherheit besser, obwohl es bei der Id auch so stimmen sollte
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

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

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 10: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 11:09 Uhr) Grund: Code-Tag -> Delphi-Tag
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 10:57
Damit erhältst du aber eine Menge Sätze, die laut aktueller Sortierfolge vor dem aktuellen Datensatz liegen.
Deswegen limitiere ich das ja auf einen Datensatz.

[/quote]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))[/quote]
Aber a0, b0 und c0 habe ich ja nicht.

Zitat:
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.
Nein, nur Leerstrings.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
idefix2

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

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 11:05
Zitat:
Deswegen limitiere ich das ja auf einen Datensatz.
Es genügt, wenn der eine Datensatz in der Sortierfolge vor dem aktuellen liegt, damit der ganze Algorithmus nicht funktioniert.


Code:
  $query = "SELECT * FROM adressen
               WHERE
                  (gesch_firma > ( SELECT gesch_firma FROM adressen WHERE id = $id ))
               OR
                  ((gesch_firma = ( SELECT gesch_firma FROM adressen WHERE id = $id ))
                    and
                   (name > ( SELECT name FROM adressen WHERE id = $id )))
               OR
                  ((gesch_firma = ( SELECT gesch_firma FROM adressen WHERE id = $id ))
                    and
                   (name = ( SELECT name FROM adressen WHERE id = $id ))
                    and
                   (vorname > ( SELECT vorname FROM adressen WHERE id = $id )))
               ORDER BY gesch_firma, name, vorname ASC limit 0,1";

Geändert von idefix2 ( 8. Jun 2010 um 11:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 11:16
Es ist übrigens Quatsch, alle Felder abzufragen, wenn man nur die ID braucht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
idefix2

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

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 11:19
Ich nehme an, er braucht dann nicht nur die id, sondern den ganzen nächsten Datensatz. Den will er ja anzeigen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 11:21
Zitat:
Code:
return $prevID->id;
Nö, nur die ID. Also kauft er für ein Glas Milch gleich eine ganze Kuh
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 20:44
Oh, es war H4ndy.

Ja, ich habe es mit verschiedenen Datensätzen ausprobiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 20:46
Dann muss ich aber einen dicken Denkfehler in meiner Logik gemacht haben
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Zum nächsten Datensatz springen

  Alt 8. Jun 2010, 22:06
Asche auf mein Haupt. Es sind alle da. Ich hatte beim ersten testen nur in der Mitte angefangen und zufällig wo die Firmen anfangen. Als er dann die Firmen durch hatte, dachte ich die privaten Kontakte würden Fehlen, aber die lagen ja DAVOR. das lag aber auch daran, will ich die Übersichtsliste noch nach der Kategorie (Arzt, Geschäftlich, Privat) sortiert habe. da kommen erst alle Ärze alphabetisch, dann alle Firmen alphabetisch und dann alle privaten Kontakte alphabtisch. Bei dir kommen erst alle privaten Kontakte und dann alle Firmen bzw. Ärzte alphabtisch. Wenn ich kjetzt aus meiner Liste den ersten Kontak aufrufe, das ist ein Arzt, lande ich bei dir am Ende der privaten Kontakte und am Anfang von den Ärzten/Firmen, also am Ende der Liste. Ich glaube mit einem GROUP BY müsste ich das noch hinbiegen können.

Hier die Liste von der aus ich einen Datensatz aufrufen kann:
Code:
"SELECT a.*, k.name as k_name
            FROM adressen a
            LEFT OUTER JOIN adr_kategorien k on k.id = a.kategorie_id
            WHERE k.name='".$kat."'
            ORDER BY k.name, a.gesch_firma, a.name, a.vorname
Wenn ich jetzt den vorherigen Datensatz haben will, dann muss ich die Größer-/Kleinerzeichen umdrehen und aus ASC DESC machen oder?
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 8. Jun 2010 um 22:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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-2025 by Thomas Breitkreuz