luckyluke
Goto Top

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.

Content-ID: 113482

Url: https://administrator.de/contentid/113482

Ausgedruckt am: 14.11.2024 um 09:11 Uhr

godlie
godlie 08.04.2009 um 11:09:33 Uhr
Goto Top
Hi
klar hab ich sowas schon gemacht face-smile
Ist eine ganz witzige Sache, am einfachsten gehts per Ajax.

Auf jeden Pfeil einfach den eine javascript funktion legen die dann den Ajax call macht, dahinter dann ein script das die entsprechende action macht und basta ist das ganze face-smile

Beispiele gibs später
godlie
godlie 08.04.2009 um 11:27:23 Uhr
Goto Top
Sodala:
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.
Spackenbremse
Spackenbremse 30.05.2009 um 18:13:13 Uhr
Goto Top
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