SQL Auswählen von "Fenster" um bestimmte Zeile herum

8

Es ist durchaus möglich, dass eine Frage wie diese schon einmal gestellt wurde, aber ich kann mir die Suchbegriffe nicht vorstellen.

Ich arbeite an einer Fotogalerie-Anwendung und möchte 9 Miniaturansichten anzeigen, die den Kontext des aktuellen Fotos zeigen (in einem 3x3-Raster mit dem aktuellen Foto in der Mitte, es sei denn, das aktuelle Foto ist in den ersten 4) Fotos werden angezeigt, in diesem Fall wenn zB das aktuelle Foto das 2. ist möchte ich die Fotos 1 bis 9 auswählen). Wenn Sie beispielsweise ein Album mit einer Liste von Fotos mit IDs erhalten:

1, 5, 9, 12, 13, 18, 19, 20, 21, 22, 23, 25, 26

Wenn das aktuelle Foto 19 ist, möchte ich auch Folgendes sehen:

9, 12, 13, 18, 19, 20, 21, 22, 23

Wenn das aktuelle Foto 5 ist, möchte ich auch Folgendes sehen:

1, 5, 9, 12, 13, 18, 19, 20, 21

Ich habe über etwas nachgedacht:

%Vor%

Dies funktioniert jedoch nicht, wenn die IDs nicht sequenziell sind (wie im obigen Beispiel) oder wenn vor dem aktuellen Foto nicht genügend Fotos vorhanden sind.

Irgendwelche Gedanken?

Danke,

Dom

ps. Bitte hinterlassen Sie einen Kommentar, wenn etwas unklar ist, und ich werde die Frage klären. Wenn jemand einen nützlicheren Titel finden kann, um anderen Leuten zu helfen, diese Frage in Zukunft zu finden, dann bitte auch einen Kommentar.

    
Dominic Rodger 29.12.2008, 16:54
quelle

3 Antworten

5

Wahrscheinlich könnte man einfach eine UNION verwenden und dann die zusätzlichen Ergebnisse im prozeduralen Code abschneiden, der die Ergebnisse anzeigt (da dies in den Fällen ohne Kanten 20 Zeilen ergibt):

%Vor%

BEARBEITEN: Die Begrenzung wurde auf beiden Seiten der UNION auf 10 erhöht, wie von le dorfer vorgeschlagen.

EDIT 2: Modifiziert, um die endgültige Implementierung besser widerzuspiegeln, wie von Dominic vorgeschlagen.

    
Turnkey 29.12.2008, 18:14
quelle
1

Wenn Sie SQL Server verwenden, können Sie mit der Funktion row_number () den Zeilenreihenfolgenindex angeben und so etwas wie folgt ausführen:

%Vor%

Bearbeiten: Hier ist ein Artikel zum Simulieren der Funktion row_number () in MySQL, die das mit kombiniert Das könnte Ihnen helfen, was Sie brauchen - ich würde es versuchen, aber ich habe keine MySQL db, mit der ich auf der Arbeit spielen kann. : -)

Ссылка

    
Ron Savage 29.12.2008 17:21
quelle
0

Dies ist das Standard "Zeilenreihenfolge" -Problem ... Wenn Ihre Datenbank rowId-fähig ist, können Sie das verwenden, ansonsten benötigen Sie eine Unterabfrage, die die Anzahl der Zeilen mit Ids zählt, die kleiner sind als die ID der aktuellen Zeile das:

- asssuming @Id ist der Wert von id in der "Mitte"

%Vor%

Wenn ein Kommentar das Problem mit dem Album aufgeworfen hat, möchten Sie jeder Unterabfrage ein Albumprädikat hinzufügen

%Vor%     
Charles Bretana 29.12.2008 17:03
quelle

Tags und Links