AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein SQL: benachbarte Datensätze mitselektieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: benachbarte Datensätze mitselektieren

Ein Thema von Hedge · begonnen am 3. Jul 2009 · letzter Beitrag vom 4. Jul 2009
Antwort Antwort
Seite 2 von 3     12 3      
omata

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

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 00:20
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).
  Mit Zitat antworten Zitat
omata

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

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 00:37
Hier noch mal ein Vorschlag...
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 = 1))) LIMIT 5
Edit: Korrektur!
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#13

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 01:32
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.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
omata

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

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 01:41
Hast du meine Korrektur versucht?
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#15

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 01:45
Weiß nicht was du korrigiert hast, deswegen habe ich es nochmal versucht, aber komme zu dem gleichen Resultat.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
omata

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

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 01:52
Also ich habe folgende Daten angelegt...
Code:
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
Abfrage...
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))) LIMIT 5
liefert...
Code:
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
Das sieht doch richtig aus?
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#17

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 01:57
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.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
omata

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

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 02:00
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
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#19

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 02:07
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.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#20

Re: SQL: benachbarte Datensätze mitselektieren

  Alt 4. Jul 2009, 09:38
Moin Hedge,

ausserdem arbeitet MySQL da gleich mit 4 Abfragen...es ist also trotzdem noch performanter, zwei Abfragen zu machen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13:08 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