AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [SQL] Datensatz + vorigen/nächsten ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Datensatz + vorigen/nächsten ermitteln

Ein Thema von Matze · begonnen am 23. Aug 2007 · letzter Beitrag vom 24. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 23. Aug 2007, 20:46
Hallo,

ich möchte den Datensatz mit einer bestimmten ID ermitteln und die IDs des vorigen/nächsten Datensatzes. Bisher habe ich das so gelöst:

SQL-Code:
# aktuelle ID
SELECT id FROM tab WHERE id = MY_ID

# vorige ID
SELECT id FROM tab WHERE id < MY_ID ORDER BY id DESC LIMIT 1

# nächste ID
SELECT id FROM tab WHERE id > MY_ID ORDER BY id ASC LIMIT 1
Nun dachte ich mir, dass das sicher auch mit einem einzigen Query gehen müsste, nur weiß ich nicht, wie das aussehen könnte.

Geht das, wenn ja, wie muss das Query aussehen?


Grüße, Matze
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 23. Aug 2007, 20:47
Dann müsstest du die 3 Abfragen zusammenjoinen bzw. als Union zusammenfügen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 23. Aug 2007, 20:51
Hallo Markus,

danke für deine Antwort. Per UNION könnte man natürlich sämtliche Queries zusammenfassen, das ist richtig, doch das ist eigentlich nicht Sinn der Sache und ich persönlich finde es unübersichtlicher und Vorteile hätte es auch keine. Ich dachte, dass es etwas gibt wie

SQL-Code:
SELECT id FROM tab
    WHERE id = MY_ID
        AND id = PREV(MY_ID)
        AND ID = NEXT(MY_ID)
Natürlich geht das so nicht, aber sowas habe ich mir erhofft, doch dann scheint das wohl nicht zu gehen. Mein Ziel sollte die Vereinfachung meines Codes sein bzw. eine kleine Verschönerung.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 23. Aug 2007, 21:00
So sollte es eigentlich gehen:
SQL-Code:
SELECT
    t1.id,
    (SELECT id FROM tab WHERE id < t1.id ORDER BY id DESC LIMIT 1 as vorgaenger,
    (SELECT id FROM tab WHERE id > t1.id ORDER BY id ASC LIMIT 1) as nachfolger
FROM
    tab t1 WHERE t1.id = MY_ID;
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 23. Aug 2007, 21:02
Hallo Matze,

vielleicht so...
SQL-Code:
SELECT a.id, MAX(b.id) prior_id, MIN(c.id) next_id
FROM tab a
LEFT JOIN tab b
  ON a.id > b.id
LEFT JOIN tab c
  ON a.id < c.id
WHERE a.id = :id
GROUP BY a.id
Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 23. Aug 2007, 21:08
Hm danke euch, doch dann habe ich im Endeffekt wieder 3 Queries (Markus) oder eines, das ich 3 Mal durchlesen muss, um zu wissen, was es eigentlich macht (Thorsten).

Ich glaube, dann bleibe ich bei den 3 Mini-Queries. Was so einfaches, wie ich's mir gewünscht habe, gibt's dann wohl nicht. Dennoch danke.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 06:49
Guten Morgen Matthias,

mit Transact-SQL würde ich es so machen:

SQL-Code:
SELECT TOP 3 id
FROM tab
ORDER BY ABS(id - :id)
Das Prinzip lässt sich auf andere SQL-Dialekte anpassen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 09:14
Hallo marabu,

danke, doch habe ich es nicht hinbekommen, das für MySQL umzuschreiben. Meine Frage war auch mehr interessehalber und meine bisherigen Lösung klappt auch wunderbar. Sie ist eben etwas länger. Ich habe u.a. auch Queries, die sich über einige Zeilen ziehen und da dann so etwas verschachteltes zu nutzen, wie zu Beginn erwähnt wurde, wäre nicht mehr lesbar.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 09:27
Hier der Code für MySQL - auch nur interessehalber:

SQL-Code:
SELECT id
FROM tab
ORDER BY ABS(id - :id)
LIMIT 3
Freundliche Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 09:36
Hallo Achim und was passiert wenn groessere Luecken in den IDs bestehen ?
Markus Kinzler
  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:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz