2009-08-06 10 views
1

Ich habe derzeit eine Tabelle (/ Grid) von Daten, die ich page, filtern und sortieren kann. Auf dem Tisch habe ich auch eine eingebaute Checkbox-Spalte. Paging, Filterung und Sortierung passieren jetzt innerhalb der SQL-Abfrage. Ich möchte nach den angeklickten Elementen in meiner Checkbox-Spalte sortieren. Dies würde alle Elemente, die an der Vorderseite der Tabelle überprüft werden, bringen. Da die Checkboxen selbst alle clientseitig sind, kann ich der SQL-Abfrage nicht nur nach einer nicht vorhandenen Spalte sortieren (vielleicht muss ich eine dynamisch erstellen?)Wie kann ich Daten mit einer 'Bestellung von' sql-Klausel mit angegebenen Daten am Anfang sortieren

Im Wesentlichen denke ich, dass das passieren würde Der Wert der Checkbox-ID würde in die Abfrage gesendet werden, von der die SQL-Abfrage selbst wissen würde, dass sie zuerst nach dieser und danach nach den anderen sortiert werden soll.

So etwas, wobei 1, 2 und 3 sind angeklickt:

SELECT * FROM Blah ORDER BY (SELECT FROM ID Blah WHERE ID IN (1,2,3)), AnotherColumnToSort

Das ist der Plan sowieso, hat jemand irgendwelche Ideen, wie man das wirklich erreicht?

Update: Smack Ich bin auf einer Oracle DB und nicht SQL Server, wie ich gedacht hatte.

Antwort

5

Legen Sie ein BIT Feld 1, wenn die Zeile markiert ist, 0 sonst, dann, um durch das Feld zuerst:

SELECT * 
FROM Blah 
ORDER BY Checked DESC, AnotherColumnToSort 

Wenn Sie nicht wollen (oder können) speichern, ob die Zeile ist in der Tabelle überprüft, leiten sie eine CASE-Klausel:

SELECT * 
FROM Blah 
ORDER BY 
    CASE 
    WHEN ID IN (1, 2, 3) THEN 1 
    ELSE 0 
    END DESC, 
    AnotherColumnToSort 
+0

Ich denke, Sie sind auf etwas. Ich werde es versuchen. Meine eigenen Gedanken betrafen zwei doppelte Abfragen mit einer UNION und REMOVE. – rball

+0

Mist, ich erinnerte mich, dass ich mit einer Oracle DB und nicht mit SQL Server arbeite. Ich denke, die Idee ist immer noch richtig, nur nicht sicher über die Syntax. – rball

+0

Ok, sieht aus wie Oracle CASE scheint sehr ähnlich. Puh! – rball

1

ich die Datenwieder Abfrage Sie bereits haben würde vermeiden - skalieren, es wird nicht gut, und Sie werden nur Probleme damit haben. Diese Art von Funktionalität ist in vielen Grids von Drittanbietern verfügbar (ich würde riskieren, dass diese in der Nähe aller Pay-For-Grids das haben).

+0

Was ich mache, bekommt nur Datensätze 1-10 von 1 Million. Um zur nächsten Seite zu gelangen oder um diese Daten zu filtern, muss ich die Daten erneut abfragen. Scheint wie eine andere Frage, aber wie würde ich das umgehen? – rball

+0

Nur als eine Anmerkung, mein gegenwärtiger Weg funktioniert ziemlich gut. Wahrere Datenbanktreffer (dachte über Caching nach), aber die Ladezeit der Seite ist von 20 Minuten auf eine Sekunde oder so gesunken. – rball

+0

Ich denke, Sie werden vielleicht von der Funktionalität einiger Steuerelemente von Drittanbietern überrascht sein. Sie können teuer sein, aber Ihre Zeit ist wertvoll und sie könnten Sie sehr retten. Wenn Sie ein .Net-Entwickler sind, besuchen Sie http://www.telerik.com/products/aspnet-ajax/grid.aspx. –

Verwandte Themen