Manuelles Sortieren von Datensätzen ...

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

  • Manuelles Sortieren von Datensätzen ...

    Hallo an alle.

    Ich habe eine alte Routine von mir ausgegraben, die mir das manuelle Sortieren
    (Reihenfolge von Datensätzen anhand einer Sortierungsnummer ändern) von Datensätzen
    innerhalb einer Tabelle erlaubt. Das waren bisher knapp 12 Zeilen (noch aus meiner Anfangszeit),
    was ich aber jetzt auf 2 Zeilen (das eigentliche Sortieren in der Tabelle) reduzieren konnte.

    Hier erstmal meine Routine:
    PHP-Code:
    <table border="0" width="600" cellspacing="1" cellpadding="2">
        <tr>
        <td bgcolor="#CCCCCC">ID</td>
        <td bgcolor="#CCCCCC">&Uuml;berschrift</td>
        <td bgcolor="#CCCCCC">SortNr</td>
        <td bgcolor="#CCCCCC">&nbsp;</td>
        <td bgcolor="#CCCCCC">&nbsp;</td>
        </tr>
        <?
        if($_GET['move']!="")
        {
            $newsortnr = $_GET['sortnr'] + ($_GET['move']);
            $sqlQuery = "UPDATE news_sort SET sortnr = sortnr + (".$_GET['move'].")";
            $sqlQuery.= "WHERE id = '".$_GET['id']."'";
            $dbErg = $db->sql($sqlQuery);
            $sqlQuery = "UPDATE news_sort SET sortnr = sortnr - (".$_GET['move'].")";
            $sqlQuery.= "WHERE id != '".$_GET['id']."' AND sortnr = '".$newsortnr."'";
            $dbErg = $db->sql($sqlQuery);
        }
        $dbErg = $db->sql("SELECT * FROM news_sort ORDER BY sortnr ASC");
        while($dbRow = mysql_fetch_array($dbErg))
        {
            ?>
            <tr>
            <td bgcolor="#EEEEEE"><?=$dbRow['id'];?></td>
            <td><?=$dbRow['news_header'];?></td>
            <td bgcolor="#EEEEEE"><?=$dbRow['sortnr'];?></td>
            <td><a href="index.php?id=<?=$dbRow['id'];?>&amp;move=1&amp;sortnr=<?=$dbRow['sortnr'];?>">nach unten</a></td>
            <td><a href="index.php?id=<?=$dbRow['id'];?>&amp;move=-1&amp;sortnr=<?=$dbRow['sortnr'];?>">nach oben</a></td>
            </tr>
            <?
        }
        ?>
    </table>
    Das Sortieren funktioniert wunderbar und ich bin auch richtig stolz auf mich , allerdings plagt mich noch ein Problem. Folgende Tabelle nutze ich zum Testen:

    Code:
    CREATE TABLE `news_sort` (
      `id` mediumint(9) NOT NULL auto_increment,
      `news_header` varchar(100) NOT NULL default '',
      `sortnr` mediumint(9) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=5 ;
    
    #
    # Daten für Tabelle `news_sort`
    #
    
    INSERT INTO `news_sort` VALUES (1, '<b>Überschrift 1</b>', 0);
    INSERT INTO `news_sort` VALUES (2, '<i>Überschrift 2</i>', 1);
    INSERT INTO `news_sort` VALUES (3, '<u>Überschrift 3</u>', 2);
    INSERT INTO `news_sort` VALUES (4, 'Überschrift 4', 3);
    Wenn ich den letzten (den mit der höchsten Sortierungsnummer) Datensatz nochmals nach unten schiebe (was theoretisch zwar nicht geht, weil es ja der letzte ist), wird die "sortnr" um 1 erhöht, was zwar richtig ist laut der UPDATE-Anweisung oben, ich aber vermeiden möchte.

    Hat jemand Ideen?

    Danke im Voraus.

    Innuendo

  • #2
    das haut sowieso nicht so ganz hin

    du hast 4 einträge mit reihenfolge: 1 2 3 4

    dann löscht du die 3 und hast: 1 2 4

    jetzt willst du die 2 eins runter schieben und hast: 1 3 4

    mach das doch so:
    $old = SELECT sort FROM tabelle WHERE id = $_GET['id'] LIMIT 1
    $new = SELECT id, sort FROM tabelle WHERE sort > $old ORDER BY SORT LIMIT 1
    Wenn $new vorhanden
    &nbsp;&nbsp;UPDATE tabelle SET sort = $old WHERE id=$new['id'] LIMIT 1
    &nbsp;&nbsp;UPDATE tabelle SET sort = $new['sort'] WHERE id=$_GET['id'] LIMIT 1
    Ende Wenn
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      du liest nach dem select einfach aus, wieviel datensätze kommen und
      lässt einen zähler mitlaufen .... ist es der letzte datensatz ... dann gibt's
      den link nach unten nicht
      Kissolino.com

      Kommentar


      • #4
        Original geschrieben von mrhappiness
        das haut sowieso nicht so ganz hin

        du hast 4 einträge mit reihenfolge: 1 2 3 4

        dann löscht du die 3 und hast: 1 2 4

        jetzt willst du die 2 eins runter schieben und hast: 1 3 4
        Es geht hierbei um das reine Sortieren. Das Löschen eines Datensatzes ist hier nicht relevant.

        Kommentar


        • #5
          trotzdem solltest du den sql teil adaptieren können oder du nimmst wurzels vorschlag
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Womit Du sicher Rest hast. Ein evtl. Löschen wurde jetzt nicht berücksichtigt, war aber beim ursprünglichen Projekt mit eingebaut. Wurzels Vorschlag habe ich jetzt eingebaut und es funktioniert tadellos.

            Dank an euch beide.

            Kommentar

            Lädt...
            X