Hallo!
ich habe folgendes kleines Problemchen: In meinem CMS habe ich eine Tabelle, in dem die Seiteninhalte abgelegt sind. Diese hat folgende Struktur (verkürzt):
Das Feld dataorder beimnhaltet eine fortlaufende Ordnungszahl, die die Bildschirmausgabe später sortiert. Genau hier liegt das Problem: Um das fortlaufende zu gewährleisten habe ich mir einer Funktion geschrieben, die mir beim Einfügen eines neuen Datensatzes abhängig von einer angebenen Beziehung zu einem Bestehenden die Datenbank umsortiert. Vielleicht ein kleines Beispiel zum verdeutlichen:
Folgende Tabelle sei gegeben:
Nun will ich folgenden Inhalt
mit der Beziehung "nach test1 einordnen" mit folgendem Funktionsaufruf
hinzufügen. Daraufhin sieht die Tabelle (ORDER BY 'dataorder') so aus:
Das funktioniert auch soweit wie es soll. Allerdings möchte ich nun gerne einen Datensatz umsortieren; zb. ID2 vor ID3 kopieren. Und hier beginnt das Problem - ich nutze die selbe Funktion wie zum einfügen und diese schmeißt alles durcheinander bzw vergibt dataorder-Zahlen nach mir nicht nachzuvollziehenden Kriterien.
Und nun meine eigentliche Frage
Wie schaffe ich es einen Datensatz vor/nach einen anderen zu kopieren und die Ordnungszahlen im Feld 'dataorder' entsprechend umzuschreiben?
ich habe folgendes kleines Problemchen: In meinem CMS habe ich eine Tabelle, in dem die Seiteninhalte abgelegt sind. Diese hat folgende Struktur (verkürzt):
Code:
id | pid | inhalt | dataorder
Folgende Tabelle sei gegeben:
Code:
id | pid | inhalt | dataorder
1 | 1 | test1 | 1
2 | 1 | test3 | 2
Code:
3 | 1 | test2
PHP:
$dataorder = reorderCat(1,"nach", 1);
function reorderCat($pid, $pos, $dataorder){
global $config;
if($pos == "vor") $qZus = " AND dataorder >= ".$dataorder;
else $qZus = " AND dataorder > ".$dataorder;
$abfrage = "SELECT *
FROM ".$config['DBstructuretable'].
" WHERE pid = ".$pid.$qZus;
echo $abfrage."<br>";
$ausgabe = mysql_query($abfrage);
$num = mysql_num_rows($ausgabe);
if ($num > 0) {
while ($row = mysql_fetch_object($ausgabe)){
$newDO = 0;
$newDO = ($row->dataorder) + 1;
$aendern = "UPDATE ".$config['DBstructuretable'].
" SET dataorder = '$newDO'
WHERE id = ".$row->id;
if (!$update = mysql_query("$aendern")) return errorHandler(23, $aendern);
}
}
mysql_free_result($ausgabe);
return $dataorder;
}
Code:
id | pid | inhalt | dataorder
1 | 1 | test1 | 1
3 | 1 | test2 | 2
2 | 1 | test3 | 3
Und nun meine eigentliche Frage
Wie schaffe ich es einen Datensatz vor/nach einen anderen zu kopieren und die Ordnungszahlen im Feld 'dataorder' entsprechend umzuschreiben?