Reihenfolge der Datensätze verändern ...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Reihenfolge der Datensätze verändern ...

    Hallo an alle.

    Ich versuche mich gerade an einem kleinen Redaktionssystem, welches dem Kunden es ermöglichen soll, auf seiner Seite News zu veröffentlichen. An und für sich nichts aufregendes, aber ich bin ja auch noch relativer SQL-Anfänger. *g*

    Die Informationen zu jedem Artikel sollen in einer MySQL-Datenbank gesichert werden, und zwar nach folgendem Aufbau:

    id | article_id | article_file | header | teaser | pic | bu

    "id" ist die fortlaufende Nummer des Artikels (also "auto-increment").
    "article_id" enthält die ID des Artikels, mit der der Artikel bei allen möglichen Operationen erkannt wird.
    "article_file" enthält den Dateinamen für den eigentlichen Artikeltext.
    "header" enthält die Überschrift, "teaser" den Anreißertext.
    "pic" enthält den Dateinamen für das Bild und "bu" die Bildunterschrift.

    Artikel lassen sich bis jetzt problemlos einstellen, bearbeiten und auch wieder löschen. Mein Problem ist jetzt: Wie realisiere ich es, dass der Nutzer die Reihenfolge der Artikel z.B. durch Klick auf "nach oben verschieben" verändern kann? Ein Denkansatz würde mir schon genügen, ein kleines Skript wäre mehr als hilfreich.

    Danke im Voraus.
    Innuendo

  • #2
    es gibt zwei lösungen. einmal über ein feld vom typ DATETIME. damit kannst du grundsätzlich deine daten nach dem einstelldatum sortiert ausgeben. news sortiert man ja auch nicht wild umher.

    die andere lösung ist eine spalte von typ INT in der du eine sortiernummer angibst. z.b. 10, 20, 30 usw.

    letzteres ist wohl eher für dich interessant. und wenn du einen artikel verschieben willst, änderst du nur die sortier-nummer. fertig.

    was mir hier noch aufgefallen ist ...
    "id" ist die fortlaufende Nummer des Artikels (also "auto-increment").
    "article_id" enthält die ID des Artikels, mit der der Artikel bei allen möglichen Operationen erkannt wird.
    ... warum machst du das erkennen über die 2. spalte? die 1. spalte erfüllt den zweck hierfür doch genauso. zumal diese id ja auch auto-increment und damit ziemlich eindeutig(er) ist.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Original geschrieben von Abraxax
      es gibt zwei lösungen. einmal über ein feld vom typ DATETIME. damit kannst du grundsätzlich deine daten nach dem einstelldatum sortiert ausgeben. news sortiert man ja auch nicht wild umher.
      Ich muss mich korrigieren. Das Redaktionssystem betrifft ein Newslettersystem. Bislang musste er die Artikel nacheinander einstellen. Wehe, es kann noch ein Artikel dazwischen, da war natürlich keine Möglichkeit gegeben, die Reihenfolge der Artikel noch im Nachhinein zu ändern (jedenfalls nicht über das Interface).

      Original geschrieben von Abraxax
      die andere lösung ist eine spalte von typ INT in der du eine sortiernummer angibst. z.b. 10, 20, 30 usw.

      letzteres ist wohl eher für dich interessant. und wenn du einen artikel verschieben willst, änderst du nur die sortier-nummer. fertig.
      Ändert die Datenbank die Reihenfolge dann selbst? Ich wüsste nämlich jetzt echt nicht, wie ich mit UPDATE die Reihenfolge ändern sollte.

      Original geschrieben von Abraxax
      was mir hier noch aufgefallen ist ... ... warum machst du das erkennen über die 2. spalte? die 1. spalte erfüllt den zweck hierfür doch genauso. zumal diese id ja auch auto-increment und damit ziemlich eindeutig(er) ist.
      Gutes Argument. Für mich zum Verständnid: Wenn die erste ID "auto-increment" ist und ich ändere die Reihenfolge von 1-2-3 auf 1-3-2, bleibt die Reihenfolge nicht dennoch 1-2-3 (wegen der fortlaufenden ID)?

      Kommentar


      • #4
        Original geschrieben von Innuendo
        Ändert die Datenbank die Reihenfolge dann selbst? Ich wüsste nämlich jetzt echt nicht, wie ich mit UPDATE die Reihenfolge ändern sollte.

        Gutes Argument. Für mich zum Verständnid: Wenn die erste ID "auto-increment" ist und ich ändere die Reihenfolge von 1-2-3 auf 1-3-2, bleibt die Reihenfolge nicht dennoch 1-2-3 (wegen der fortlaufenden ID)?
        die reihenfolge sollte nciht an die id gekoppelt sein. wenn du eine sortierspalte hast, macht du in der sql-query einfach

        ORDER BY sortspalte

        ans ende. und schon ist sortiert. die id ist grundsätzlich irrelevant.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Ich dachte, dass ORDER BY nur bei SELECT geht, jedoch nicht bei UPDATE. Oder habe ich mich da verlesen?

          Kommentar


          • #6
            das ist schon richtig. deine ausgabe soll ja sortiert sein. wenn du das updatest, setzt du ja erst einmal die sortierung.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Moment, das verstehe ich jetzt nicht. Dass ich die Ausgabe sortiert wiedergeben kann, habe ich begriffen, aber wie soll das beim UPDATE passieren, wenn ich dort kein "ORDER BY" verwenden kann?

              Kommentar


              • #8
                ein UPDATE machst du ja nur für EINEN datensatz. was willst du da sortieren?
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Original geschrieben von Innuendo
                  Moment, das verstehe ich jetzt nicht. Dass ich die Ausgabe sortiert wiedergeben kann, habe ich begriffen, aber wie soll das beim UPDATE passieren, wenn ich dort kein "ORDER BY" verwenden kann?
                  die sortierst die datensätze nicht in der db, in der bleiben sie so drin, wie sie eingetragen wurden. und daran gibt's auch nichts zu ändern.

                  sortiert wird ausschliesslich beim ausgeben.

                  das update machst du nur, um bei einem datensatz das sortfeld zu verändern. nach diesem sortfeld wird dann bei der ausgabe sortiert.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Ach soooooooooooooooooooooo. Jetzt verstehe ich. Danke euch beiden.

                    Kommentar


                    • #11
                      Hallo an alle.

                      Ich habe hier ein Skript gefunden, welches mir "angeblich" das Verändern der Reihenfolge ermöglicht. Ich habe es auf meine Variablen umgeschrieben, aber irgendwie geht es nicht. Jemand eine Idee?

                      Code:
                      if($move=="up")
                      {
                       $sql_up = "SELECT sort_nr from tabelle WHERE sort_nr<'$sort_nr' ORDER by sort_nr DESC LIMIT 10";
                       $res_up = mysql_query($sql_up);
                       while ($row_up = mysql_fetch_row ($res_up))
                       {
                        $sort_nr2 = $row_up[0];
                        mysql_query("UPDATE tabelle SET sort_nr='$sort_nr2' WHERE sort_nr='$sort_nr'");
                        mysql_query("UPDATE tabelle SET sort_nr='$sort_nr' WHERE sort_nr='$sort_nr2'");
                       }
                      }
                      
                      if($move=="down")
                      {
                       $sql_down = "SELECT sort_nr from tabelle WHERE sort_nr>'$sort_nr' ORDER by sort_nr LIMIT 10";
                       $res_down = mysql_query($sql_down);
                       while ($row_down = mysql_fetch_row ($res_down))
                       {
                        $nr2 = $row_down[0];
                        mysql_query("UPDATE tabelle SET sort_nr='$sort_nr' WHERE sort_nr='$sort_nr2'");
                        mysql_query("UPDATE tabelle SET sort_nr='$sort_nr2' WHERE sort_nr='$sort_nr'");
                       }
                      }

                      Kommentar


                      • #12
                        du musst auch die tabellenfelder und den tabellennamen anpassen...

                        und genau genommen ist das die umsetzung meines vorschlages.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Das habe ich ja getan. Gut, "tabelle" heißt bei mir "redaktion" und "sort_nr" bei mir "article_order". Aber ich denke nicht, dass es daran liegt, dass das Skript die Sachen nicht ändert. Es passiert schlicht und ergreifend nichts. Muss ich vielleicht doch die "id" mit einbeziehen?

                          Kommentar


                          • #14
                            Ich bin langsam am Verzweifeln. Hat denn keiner eine Idee????? HILFE.

                            Kommentar


                            • #15
                              ach jung. so schwer ist das doch nicht.

                              lege eine testtabelle an.
                              Code:
                              DROP TABLE IF EXISTS TestTab;
                              CREATE TABLE TestTab (
                                TabId int(11) NOT NULL auto_increment,
                                TabName varchar(30) NOT NULL default '',
                                TabSort int(4) NOT NULL default '990',
                                PRIMARY KEY  (TabId)
                              ) TYPE=MyISAM;
                              und befülle sie mit daten.
                              Code:
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 10',   10);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 30',   30);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 20',   20);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 70',   70);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 60',   60);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 80',   80);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 50',   50);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 90',   90);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 100', 100);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 40',   40);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 150', 150);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 140', 140);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 110', 110);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 130', 130);
                              INSERT INTO TestTab (TabName, TabSort) VALUES ('irgendwas 120', 120);
                              nun mache eine normale query von dir.
                              Code:
                              SELECT * FROM TestTab
                              und jetzt mache diese ausgabe SORTIERT
                              Code:
                              SELECT * FROM TestTab ORDER BY TabSort
                              oder
                              Code:
                              SELECT * FROM TestTab ORDER BY TabSort ASC
                              oder
                              Code:
                              SELECT * FROM TestTab ORDER BY TabSort DESC
                              wenn du das jetzt immer noch verstehst, ist es ratsam mal in den buchhandel zu laufen.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X