Raffi: Lösungsansätze => Daten sortieren

Hallo Leute

Ich stehe vor folgendem Problem:
Ich habe ein CMS wo der Kunden einzelne Datensätze eingeben kann.
Angenommen er hat nun 10 Datensätze eingegeben und möchte diese ordnen. Wie soll ich das in der Benutzeroberfläche lösen, damit er die Datensätze in die Reihenfolge bringen kann, wie er möchte. In der DB ist es mir klar. Da mach ich einfach ne Spalte reihenfolge, nach der ich es dann sortiert ausgebe. Aber wie löse ich das am Benutzerfreundlichsten im CMS GUI?

Für Tipps wäre ich euch dankbar.

Danke und Gruss
Raffi

  1. Hi,

    z. B. mit zwei solchen Selects:

    1
                          2
    Pos. 1 springt zu Pos 3
         2                4
         3
         4

    Gruesse  Joachim

    1. Aber wie soll ich dann machen, dass im Select im CMS z.B. die 3 nur einmal ausgewählt werden kann?

  2. Hello Raffi,

    Ich habe ein CMS wo der Kunden einzelne Datensätze eingeben kann.
    Angenommen er hat nun 10 Datensätze eingegeben und möchte diese ordnen. Wie soll ich das in der Benutzeroberfläche lösen, damit er die Datensätze in die Reihenfolge bringen kann, wie er möchte. In der DB ist es mir klar. Da mach ich einfach ne Spalte reihenfolge, nach der ich es dann sortiert ausgebe. Aber wie löse ich das am Benutzerfreundlichsten im CMS GUI?

    Dasselbe Problem habe ich bei meinem CMS auch noch nicht endgültig gelöst. Das könnte also unsere gemeinsame Tagesaaufgabe werden, wenn Du Lust und Zeit hast. Irgendwann muss ich es ja mal fertig machen.

    Zur Zeit wird das so gelöst, dass der Client einfach eine Zahl angeben muss, an welcher Position er den Satz haben will. Bei gleichen Positionen entscheidet dann der Name der Seite. Wenn man also eine alphabetisch sortierte Gruppe haben will, muss man nur alles auf einen Index legen.

    Für mich ist die spannende Frage, wie man nun ein ReIndex in der DB durchführen kann. Es gibt ja bei MySQL auch Variablen, die man dafür nutzen kann. Aber meine Versuche sind bisher immer in die Hose gegangen.

    Das Einfügen von Datensätzen in die Tabelle kann man am Client ja quasi-grafisch lösen. Ich stelle die Liste zuzüglich Ende-Markierung dar und der Client wird gefragt, VOR welchem Datensatz er den neuen einfügen will. Der Index dieses Satzes ist dem System ja bekannt.

    Nun könnte man 2,4,6,8,... zählen und dann den Satz eben z.B. auf 5 einfügen, wenn er denn vor 6 stehen soll.

    Oder man muss gleich 1,2,3,4,5 zählen und wenn der Client auf 4 klickt, ein Update mit Pos = Pos+1 ab der Position 4 machen und dann erst einfügen. Mit SQL müsste das ja gehen, dass man da "vorwärts" arbeitet und quasi seine Filterkriterien kaputtschreibt. Beim guten alten dBase musste man immer aufpassen, dass man nicht den Index veränderte, nach dem die Sache gerade sortiert war. Dann konnte man schöne zirkuläre Verläufe erzeugen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Ja, da können wir uns was überlegen....
      Nur habe ich keine idee....dachte mir vielleicht mit Select boxen, die dann per JavaScript nur die inhalte (Nummern) anzeigen, die noch frei sind....hmm...aber ob das funktioniert?

      Wie meinst du das, jede Index Zeile +1 ab der Position wo eingefügt wird? Das ist dann aber einen normale spalte oder? (kein Autoincrement).

      Sortierst du dann einfach bei der Ausgabe mit order by SPALTE?

      Gruss
      Raffi

      1. Hello,

        Nur habe ich keine idee....dachte mir vielleicht mit Select boxen, die dann per JavaScript nur die inhalte (Nummern) anzeigen, die noch frei sind....hmm...aber ob das funktioniert?

        Bei Seiten zeige ich immer drei Menuebenen

        Parent
            Sibling
            Sibling
            Self
              Child
              Child
              Child
            Sibling

        Geht natürlich nur, wenn vorhanden.

        Man kann zu einer Seite nun immer Unterseiten anlegen, indem man sich in die Seite stellt. Das ist für die Leute leichter zu verstehen, als die Lösung, die z.B. Typo3 verwendet. Das solltest Du Dir aber mal anschauen.

        In den Seiten werden die "Items" angelegt. Da kann man dann als Berechtigter eine Liste anzeigen lassen. In der steht das Positionsfeld als normale Spalte mit drin.

        Wie meinst du das, jede Index Zeile +1 ab der Position wo eingefügt wird? Das ist dann aber einen normale spalte oder? (kein Autoincrement).

        Nein, das ist dann das Pos-Feld in der Tabelle. Ich sortiere über

        order by Pos, Name

        Und wenn man nun in eine Liste

        1,2,3,5,8,10,25

        ausgerechnet vor 3 etwas einfügen sill, dann ist ja kein Platz mehr frei. Man muss also vorher

        Update ITEMS set POS = POS+1 where PAGE=$page and POS >= 3

        dann wird aus der Liste

        1,2,4,6,9,11,26

        und man hat die 3 freigestellt.

        Mit SQL müsste das gehen.

        Nun fehlt mir nur noch ein Tool zum reindizieren. Ich will dann die Postionen

        1,2,3,4,5,6,7

        haben. Dazu fällt MIR aber nichts ein, wie man das mit einem SQL-Statement lösen könnte.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Ich werde es nun folgendermassen machen:

          Der Kunde kann den Datensatz jeweils um 1 nach oben oder nach unten verschieben. Bei 5-10 Datensätzen finde ich das eine akzeptable Lösung, die am wenigsten zur Verwirrung führt.

          gruss
          raffi

          1. Hello,

            Ich werde es nun folgendermassen machen:

            Der Kunde kann den Datensatz jeweils um 1 nach oben oder nach unten verschieben. Bei 5-10 Datensätzen finde ich das eine akzeptable Lösung, die am wenigsten zur Verwirrung führt.

            Schade eingentlich, dass Du dich so schnell geschlagen gibst. Ich hätte mich gefreut, einen Mitstreiter bei de Problemlösung zu finden.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Ja wir können schon noch weitermachen....nur kommt mir echt keine idee, wie man das für den User konfortabel lösen könnte...

              Ich möchte, das es der Kunde so einfach wie möglich hat. Hast Du noch eine idee?

              gruss
              raffi

              1. Hello,

                Ja wir können schon noch weitermachen....nur kommt mir echt keine idee, wie man das für den User konfortabel lösen könnte...

                Ich möchte, das es der Kunde so einfach wie möglich hat. Hast Du noch eine idee?

                Das geht mir genauso. Darum habe ich mir schon viele Lösungen angeschaut. Schön wär natürlich sowas, wie Drag & Drop. Aber das geht wieder nicht ohne JavaScript, was doch der Eine oder Andere ausgeschalet hat. Eigentlich müsste man dann besser den ganzen Browser ausschalten *gg*

                Ich denke, man kann da nur ein Formular mit der bisherigen Liste anbieten, bei der der Anwender dann mittels Radios das Objekt auswählen kann und mittels Button (kleines Dreieck, dass zwischen die Zeilen zeigt) das Ziel abgeben kann.

                Der Rest ist dann Serversache.

                Mir fehlt aber immer noch eine pfiffige Idee für das Reindex der betroffenen Seitengruppe. Ich habe das mit MySQL-Variablen versucht, aber irgendwie bekomm ich das nicht hin. Damit sollte es aber angeblich gehen.

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  3. habe d'ehre

    Ich habe ein CMS wo der Kunden einzelne Datensätze eingeben kann.
    Angenommen er hat nun 10 Datensätze eingegeben und möchte diese ordnen. Wie soll ich das in der Benutzeroberfläche lösen, damit er die Datensätze in die Reihenfolge bringen kann, wie er möchte. In der DB ist es mir klar. Da mach ich einfach ne Spalte reihenfolge, nach der ich es dann sortiert ausgebe. Aber wie löse ich das am Benutzerfreundlichsten im CMS GUI?

    Ich habe aehnliches fuer die Anzeige einer Maschinenuebersicht wie folgt geloest:

    Dateien stehen in einer Textfile
    Sortierfeld: Typennummer (Feld 4 in Datensatz) also $sorter = 4

    $dataread=file("$datafile");
     for ($i=0;$i<count($dataread);$i++):
      $test=explode("|",$dataread[$i]);
      $tabrecord[$i]=($test[$sorter])."|".$dataread[$i];
    endfor;

    dann

    if($sorter == "6" or $sorter == "7" or $sorter == "25"):
      if($sortform == "up"){sort ($tabrecord, SORT_NUMERIC);}else{rsort ($tabrecord, SORT_NUMERIC);}
      reset ($tabrecord);
     else:
      if($sortform == "up"){sort ($tabrecord, SORT_STRING);}else{rsort ($tabrecord, SORT_STRING);}
      reset ($tabrecord);
     endif;

    dann ganz normal Array lesen und ausgeben.

    Fuer Felder aus einer DB natuerlich andere Leseanweisungen.

    Mag vielleicht auch simpler gehen, funktioniert aber.

    Zum anschauen unter http://www.wilsch.de/page.phtml?pv=0&lg=de&mod=3&sb=010&lv3=10

    carpe diem
    Wilhelm