2016-04-18 7 views
0

Ich paging einige SQL-Abfragen Ergebnisse in meiner Anwendung mit LIMIT und OFFSET, jetzt möchte ich Javascript-Steuerelemente hinzufügen, um die resultierende Liste vom Front-End bis zur SQL-Abfrage ORDER BY die Reihenfolge zu bestellen.Sollen die ORDER BY-Spalten der SQL-Abfrage in den JS-Code geschrieben werden?

Wo soll ich die Spalte schreiben, nach der sortiert wird, die an die SQL ORDER BY übergeben wird?

Sollte es in den JS-Code geschrieben werden? Soll eine generische Zeichenfolge an den Server übergeben und dann in die SQL-Spaltennamen konvertiert werden?


Hier sind einige Teile des Codes, das Problem zu klären:

Die SQL-Abfrage, die Zeilen in der JS angezeigt zu bekommen:

SELECT * 
FROM MY_TABLE 
ORDER BY :criteria 
LIMIT :limit 
OFFSET :offset 

Der JS-Code verantwortlich für die Abfrage AJAX:

function sortBy(selected) { 
    $.ajax({ 
     url: "/super/link/to/controller/method?orderBy=" + selected.val(), 
     type: 'GET', 
     dataType: "HTML", 
     success: function (data) { 
      // Code here doing the list refresh with the data 
     } 
    }); 
} 

der Parameter unter orderBy wird mit th zu der SQL-Abfrage hinzugefügt werden e Name criteria. Es kann vom Server manipuliert werden, um den Namen der SQL-Tabellenspalte zu finden, aber ist es wirklich eine gute Übung?

Antwort

2

Ich sehe nichts inhärent falsch damit. Es kann andere/bessere Optionen geben, die auf anderen ORM-Lösungen basieren, die Sie möglicherweise verwenden, aber angesichts der von Ihnen bereitgestellten Informationen sieht diese Lösung gut aus, solange Sie Ihre Anwendung gegen die SQL-Injektion absichern.

+0

Nun, ich mag nicht die Idee von JS schreiben SQL-Abfragen. Aber ja, ich kann es blockieren, indem ich den in meinem Controller eingegebenen Wert einschalte, um zu verhindern, dass Kauderwelsch an die Abfrage weitergegeben wird. Was ich jedoch nicht besonders mag, ist, dass das DB-Design JS betrifft. Es klingt wie eine ziemlich ausgedehnte Designabhängigkeit für mich. –

+1

Ich sehe nicht, wo die Abfrage selbst in JS geschrieben wird. Ich sehe gerade, dass JS den ausgewählten Wert in der Benutzeroberfläche übergibt. Wie Sie bereits sagten, verwenden Sie eine switch-Anweisung auf dem Server, um die von der Benutzeroberfläche stammenden Werte zu verarbeiten und die Abfrage entsprechend zu erstellen. Zu diesem Zeitpunkt teilt die Benutzeroberfläche dem Server nur mit, was ausgewählt wurde, und wird vom DB-Design überhaupt nicht beeinflusst. Die Zeichenfolge in der Benutzeroberfläche muss nicht die genaue Zeichenfolge sein, die in der Abfrage verwendet wird. Sie müssen jedoch über eine Übersetzungsebene verfügen, um die Abfrage unter Verwendung der Zeichenfolge aus der Benutzeroberfläche ordnungsgemäß erstellen zu können. –

+0

"Sie müssen eine Übersetzungsebene haben", ja, das ist der wichtige Teil, nach dem ich gesucht habe. Ich werde es in die DAO legen, oder? –

Verwandte Themen