Sortierfunktion von Tabellenspalten in PHP-Skript (Pfeile auf- und abwärts)
Guten Morgen liebe Entwicklergemeinde,
ich sitze vor einer Aufgabe, bei der ich nicht so genau weiß wie ich dran gehen soll.
Ausgangslage ist folgende: Ich habe eine Liste von Parametern. Diese Liste wird ständig erweitert, sprich neue P. hinzugefügt und entfernt. Dabei ist die Reihenfolge, die Anordnung sehr wichtig. Da manche Parameter mehrmals vorhanden sind, aber zu einer anderen Kategorie gehören, etc..
Wie aus vielen WCMS (da fällt mir Joomla spontan ein, Screenshot hier bereits bekannt, kann man die Reihenfolge von verschiedenen Inhalten per Pfeil auf-/ und abwärts bestimmen.
Die gleiche Methode wäre die einfachste in meinem Skript. Dabei habe ich mir gedacht alle Parameter ausgeben zu lassen. Mit Hilfe einer Sortierungs-ID werden alle Parameter durchnummeriert und mit einer Kategorierungs- und Parameter-ID versehen, damit die Zuordnungen stimmen.
Nun müssten sich doch theoretisch nur die Sortierungs-ID ändern sobald man den Pfeil, auf-/ bzw. abwärts klickt.
Frage hierbei ist: Wie mache ich MySQL klar, dass die ausgewählte Spalte eins hoch oder runter soll, sobald ich einen der Pfeile anklicke UND zugleich die gesamte Nummerierung sich für die anderen Parameter ändert? Mit ASC und DESC lässt sich das ganze ja so einfach nicht lösen.
Hat das jemand schon von euch gemacht oder anders gelöst?
Über Ratschläge wäre ich euch dankbar.
Viele Dank und Grüße
Lucky.
ich sitze vor einer Aufgabe, bei der ich nicht so genau weiß wie ich dran gehen soll.
Ausgangslage ist folgende: Ich habe eine Liste von Parametern. Diese Liste wird ständig erweitert, sprich neue P. hinzugefügt und entfernt. Dabei ist die Reihenfolge, die Anordnung sehr wichtig. Da manche Parameter mehrmals vorhanden sind, aber zu einer anderen Kategorie gehören, etc..
Wie aus vielen WCMS (da fällt mir Joomla spontan ein, Screenshot hier bereits bekannt, kann man die Reihenfolge von verschiedenen Inhalten per Pfeil auf-/ und abwärts bestimmen.
Die gleiche Methode wäre die einfachste in meinem Skript. Dabei habe ich mir gedacht alle Parameter ausgeben zu lassen. Mit Hilfe einer Sortierungs-ID werden alle Parameter durchnummeriert und mit einer Kategorierungs- und Parameter-ID versehen, damit die Zuordnungen stimmen.
Nun müssten sich doch theoretisch nur die Sortierungs-ID ändern sobald man den Pfeil, auf-/ bzw. abwärts klickt.
Frage hierbei ist: Wie mache ich MySQL klar, dass die ausgewählte Spalte eins hoch oder runter soll, sobald ich einen der Pfeile anklicke UND zugleich die gesamte Nummerierung sich für die anderen Parameter ändert? Mit ASC und DESC lässt sich das ganze ja so einfach nicht lösen.
Hat das jemand schon von euch gemacht oder anders gelöst?
Über Ratschläge wäre ich euch dankbar.
Viele Dank und Grüße
Lucky.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113482
Url: https://administrator.de/contentid/113482
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
Sodala:
der Javascript Teil:
Und das hier ist der php Teil:
Nun zum soriteren bei mysql.
Am einfachsten geht das über eine eig. Spalte ( z.B.: sort ) die beinhaltet Zahlen von 1-n.
Beim Select der Tabelle einfach einen ORDER BY sort ASC / DESC angeben.
Wird jetzt eine Zahl nach oben geschoben so müssen die anderen ja auch rücken, deswegen kommst
du nicht herum dir mit einer Schleife alle Datensätze zu holen die nummerierung zu ändern und die Dinger
wieder zurückzuschreiben.
Was dann auch noch ratsame wäre, die Tabelle mit den Parametern neu aufzubauen, das könntest in der sort.php erledigen und dort ausgeben und dann die vorhandene Tabelle ersetzen.
Alles in allem in ca ner Stunde programmierbar.
der Javascript Teil:
<script type="text/javascript" language="javascript">
var http_request = false;
function macheRequest(url) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// zu dieser Zeile siehe weiter unten
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
http_request.onreadystatechange = alertInhalt;
http_request.open('POST', url, true);
http_request.send("id=ID&sort=up");
}
function alertInhalt() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
alert(http_request.responseText);
} else {
alert('Bei dem Request ist ein Problem aufgetreten.');
}
}
}
</script>
<span
style="cursor: pointer; text-decoration: underline; color: blue"
onclick="macheRequest('sort.php')">Einen Request absetzen
</span>
Und das hier ist der php Teil:
<?php
d=ID&sort=up
$id = mysql_escape_string($_POST['id']);
if(is_numeric($id)) {
if($_POST['sort'] == "up" || $_POST['sort'] == "down") {
// hier kommt dann der Teil wo du mysql beibringst wie er sortieren soll....
// mehr dazu unten, wenn du eine Rückgabe haben willst einfach mit echo was ausgeben.....
}
}
?>
Nun zum soriteren bei mysql.
Am einfachsten geht das über eine eig. Spalte ( z.B.: sort ) die beinhaltet Zahlen von 1-n.
Beim Select der Tabelle einfach einen ORDER BY sort ASC / DESC angeben.
Wird jetzt eine Zahl nach oben geschoben so müssen die anderen ja auch rücken, deswegen kommst
du nicht herum dir mit einer Schleife alle Datensätze zu holen die nummerierung zu ändern und die Dinger
wieder zurückzuschreiben.
Was dann auch noch ratsame wäre, die Tabelle mit den Parametern neu aufzubauen, das könntest in der sort.php erledigen und dort ausgeben und dann die vorhandene Tabelle ersetzen.
Alles in allem in ca ner Stunde programmierbar.
Hallo..
Oder du versiehst alle deine Datensätze mit einer ID-Spalte. Wenn du z.b. in der Spalte 3 auf den "Abwärts-Knopf" drückst, soll dein Script einfach die ID in eine 4 ändern und die voherige ID 4 in eine 3. Eingendlich ganz simpel, kommt dem schon genannten extrem nahe.. das ist wohl die beste möglichkeit. ob das mit ajax leichter geht, bezweifel ich allerdings.
mfg
Oder du versiehst alle deine Datensätze mit einer ID-Spalte. Wenn du z.b. in der Spalte 3 auf den "Abwärts-Knopf" drückst, soll dein Script einfach die ID in eine 4 ändern und die voherige ID 4 in eine 3. Eingendlich ganz simpel, kommt dem schon genannten extrem nahe.. das ist wohl die beste möglichkeit. ob das mit ajax leichter geht, bezweifel ich allerdings.
mfg