![]() |
[SQL] Datensatz + vorigen/nächsten ermitteln
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:
Nun dachte ich mir, dass das sicher auch mit einem einzigen Query gehen müsste, nur weiß ich nicht, wie das aussehen könnte.
# 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 Geht das, wenn ja, wie muss das Query aussehen? Grüße, Matze |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
Dann müsstest du die 3 Abfragen zusammenjoinen bzw. als Union zusammenfügen
|
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
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:
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.
SELECT id FROM tab
WHERE id = MY_ID AND id = PREV(MY_ID) AND ID = NEXT(MY_ID) |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
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; |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
Hallo Matze,
vielleicht so...
SQL-Code:
Gruss
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 Thorsten |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
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). :mrgreen:
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. :) |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
Guten Morgen Matthias,
mit Transact-SQL würde ich es so machen:
SQL-Code:
Das Prinzip lässt sich auf andere SQL-Dialekte anpassen.
SELECT TOP 3 id
FROM tab ORDER BY ABS(id - :id) Grüße vom marabu |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
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. |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
Hier der Code für MySQL - auch nur interessehalber:
SQL-Code:
Freundliche Grüße
SELECT id
FROM tab ORDER BY ABS(id - :id) LIMIT 3 |
Re: [SQL] Datensatz + vorigen/nächsten ermitteln
Hallo Achim und was passiert wenn groessere Luecken in den IDs bestehen ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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