![]() |
Re: SQL: benachbarte Datensätze mitselektieren
Mit weniger als zwei Unterabfragen wirst du das nicht hinbekommen, weil du den Vor-Vorgänger ermitteln musst, damit sind es automatisch immer 3 Abfrage(Hauptabfrage + 2 Unterabfragen).
|
Re: SQL: benachbarte Datensätze mitselektieren
Hier noch mal ein Vorschlag...
SQL-Code:
Edit: Korrektur!
SELECT username, score, land
FROM user WHERE score >= (SELECT MAX(score) FROM user WHERE score < (SELECT MAX(score) FROM user WHERE score < (SELECT score FROM user WHERE user_id = 1))) LIMIT 5 |
Re: SQL: benachbarte Datensätze mitselektieren
Hab es 2 Mal ausprobiert, aber so geht es leider nicht.
Zwar gibt es 5 Ergebnisse, unter denen auch der Auserwählte ist, aber die anderen Ergebnisse sind frei aus der Luft gegriffen. |
Re: SQL: benachbarte Datensätze mitselektieren
Hast du meine Korrektur versucht?
|
Re: SQL: benachbarte Datensätze mitselektieren
Weiß nicht was du korrigiert hast, deswegen habe ich es nochmal versucht, aber komme zu dem gleichen Resultat.
|
Re: SQL: benachbarte Datensätze mitselektieren
Also ich habe folgende Daten angelegt...
Code:
Abfrage...
user_id | username | score | land
1 | 1 | 1 | 1 2 | 2 | 2 | 2 3 | 3 | 3 | 3 4 | 4 | 4 | 4 11 | 11 | 11 | 11 21 | 21 | 21 | 21 32 | 32 | 32 | 32
SQL-Code:
liefert...
SELECT username, score, land
FROM user WHERE score >= (SELECT MAX(score) FROM user WHERE score < (SELECT MAX(score) FROM user WHERE score < (SELECT score FROM user WHERE user_id = 4))) LIMIT 5
Code:
Das sieht doch richtig aus?
user_id | username | score | land
2 | 2 | 2 | 2 3 | 3 | 3 | 3 4 | 4 | 4 | 4 11 | 11 | 11 | 11 21 | 21 | 21 | 21 |
Re: SQL: benachbarte Datensätze mitselektieren
Ich habs in dem Datenbestand versucht, wo es auch zum Einsatz kommen soll (knapp 6000 Datensätze).
Deine Test-Daten liegen bereits in der Grundreihenfolge sortiert vor. Deshalb funktioniert es wahrscheinlich. |
Re: SQL: benachbarte Datensätze mitselektieren
Und wenn du deine Abfrage noch sortierst...
SQL-Code:
SELECT username, score, land
FROM user WHERE score >= (SELECT MAX(score) FROM user WHERE score < (SELECT MAX(score) FROM user WHERE score < (SELECT score FROM user WHERE user_id = 4))) ORDER BY score LIMIT 5 |
Re: SQL: benachbarte Datensätze mitselektieren
Ich glaub ich gugg nicht recht.
Das ist des Rätsels Lösung! Es funzt!!! Hatte dein Beispiel auch mit Order By erweitert, aber vor lauter Schlaftrunkenheit das LIMIT 5 übersehen, das dann davor stand. Ich muss allerdings mal ein wenig auf die Performance schauen, weil diese Abfrage auf einer Seite 3 Mal genutzt werden muss. |
Re: SQL: benachbarte Datensätze mitselektieren
Moin Hedge,
ausserdem arbeitet MySQL da gleich mit 4 Abfragen...es ist also trotzdem noch performanter, zwei Abfragen zu machen. Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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