Datensatzposition innerhalb einer Tabelle ändern

kippi01

Mitglied
Hallo, ich komme einfach nicht weiter!
Ich habe eine Tabelle, in der Kurse gelistet sind. Der Administrator soll die Möglichkeit bekommen, die Position dieser Kurse selbst zu bestimmen (in meinem Fall mit einem image für up und einem image für down, habe ich mal bei einer Bildergalerie gesehen). In meinem Beispiel werden leider die Positionsnummern doppelt vergeben. Wie bekomme ich das schöner hin? Hier der bisherige Code:


Code:
//Reihenfolge ändern


$query = "SELECT position FROM tks_kurse WHERE id = '$id'";
$abc = mysql_query($query);
$row = mysql_fetch_object($abc);

  
        if($_GET["action"] == "up") { 
            //Den Datensatz um eine Position nach oben verschieben: 
            mysql_query("UPDATE tks_kurse SET position = position - 1 WHERE id = '$id'"); 
             
            //Den darüber liegenden Datensatz einen nach unten verschieben: 
            mysql_query("UPDATE tks_kurse SET position = '$row->position' WHERE position = '$row->position + 1'"); 
	
		
        } 
        if($_GET["action"] == "down") { 
            //Den Datensatz um eine Position nach unten verschieben: 
            mysql_query("UPDATE tks_kurse SET position = position + 1 WHERE id = '$id'"); 
             
            //Den darüber liegenden Datensatz einen nach oben verschieben: 
            mysql_query("UPDATE tks_kurse SET position = '$row->position' WHERE position = '$row->position - 1'"); 
        } 
        
 
//Daten auslesen

$result = mysql_query("SELECT * FROM tks_kurse ORDER BY position",$db);


?>

<table width="600" align="center">
  <tr bgcolor="#FFCC00">
    <td width="25%"><strong>Wochentag</strong></td>
    <td width="25%"><b>Datum</b></td>
    <td width="25%"><b>Thema</b></td>
    <td width="25%"><div align="center">Position</div></td>
	<td width="25%">&nbsp;</td>
	<td width="25%">&nbsp;</td>
  </tr>
  <? while ($daten = mysql_fetch_array($result)) { ?>
  <tr>
    <td width="25%" height="32"><? echo $daten[wochentag]; ?></td>
    <td width="25%" height="32"><? echo $daten[datum]; ?></td>
    <td width="25%" height="32"><? echo $daten[thema]; ?></td>
    <td width="25%" height="32"><div align="center"><? echo "<a href=$PHP_SELF?action=up&id=$daten[id]><img src=images/arrow_up.gif border=0></a>"; ?>  <? echo "<a href=$PHP_SELF?action=down&id=$daten[id]><img src=images/arrow_down.gif border=0></a>"; ?></div></td>
	<td width="25%" height="32"><div align="center"><a href="#">bearbeiten</a></div></td>
	<td width="25%" height="32"><div align="center"><a href="#">l&ouml;schen</a></div></td>
	
  </tr>
  <tr>
    <td height="1" colspan="6" bgcolor="#FFCC00"></td>
  </tr>
  <? } ?>
</table>
 
Du brauchst ein Feld z.B. "ordnung", hier bekommt jeder Datensatz eine eindeutige Nummer, nach dieser wird dann geordnet.

Wenn du jetzt einen Datensatz nach unten verschieben willst, rechne das Feld "ordnung" +1 und den Datensatz der danach kommt dann einfach -1.

Also so:
Datensatz1[ordnung] = 2 (soll einen nach unten verschoben werden)
Datensatz2[ordnung] = 3
Datensatz3[ordnung] = 4

Datensatz1[ordnung] = 2+1
Datensatz2[ordnung] = 3-1
Datensatz3[ordnung] = 4

Fertig...
Jetzt musste das Ganze nurnoch in Code umsetzen... ;-)
 
Zurück