datensätze sortieren (nicht order by)

Also ich lasse mir in einem cms den Content anzeigen, der auf einer Webseite dargestellt wird. Jetzt will ich die Reihenfolge der Contents ändern.

Content 1
Content2
Content3

ist z.B. die Reihenfolge.

Jetzt will ich aber z.B. diese Reihenfolge haben:

Content2
Content1
Content3

ich will also per klick nach oben oder unten verschieben

PS: das mit der Prüfung der id beim insert hört sich gut an. Kannst du mir dazu noch einen Tip geben?
Aber es kann dennoch sein, dass ein datensatz dazwischen gelöscht wird. Dann stimmt doch die Zahlenfolge nicht mehr (1,2,3,4,5,6,7). Wenn ich die 4 lösche(1,2,3,5,6,7)
 
Zuletzt bearbeitet:
Ok, wenn das CMS gut durchdacht ist, hätte es z.B. folgende Funktion:

Wenn die Anforderung von dir so sein muss, muss das CMS folgende Punkte aufweisen, sonst ist es kein CMS in dem Sinne und nicht für deine Zwecke zu gebrauchen:

Anzeigen der Einträge in der Datenbank. Die Info, das laufende Nummern (id) fehlen, weil Löschvorgänge stattgefunden haben.
Dann must du auf einen Link oder Button klicken können, um die Nummerierung neu vorzunehmen. Sprich - es muss mit dem Klick auf den Button die Auflistung erfolgen, in welcher am Ende oder am Anfang (ist auch wurscht wo) ein input - tag vorhanden ist, der die Nummerierung von 1 - xxx vornimmt. Am Ende muss der Button submit sein, damit du die neue Nummernvergabe übernehmen kannst.

Das wäre das eine. Das andere was fehlt ist, das du einen Bereich in deinem CMS hast, in welchem du die Anzeige steuern kannst für die Ausgabe an die User. Sprich es muss ein Bereich sein, in welchem du einfach die 3 id's in einem input - tag angeben kannst, welche die User zu sehen bekommen, was den Inhalt dieser drei id's betrifft.

Es macht ja kaum Sinn, das du ständig irgendwelche Einträge hin und her verschiebst.

Somit musst du vor allem nicht ständig irgendwelche Datenbankaktionen laufen lassen, sondern steuerst die Anzeige der jeweils drei oder 6 gewählten Contentbereiche in einem eigens dafür angelegten CMS - Bereich durch eingabe der jeweils von dir gewählten ID.

Herz was willst du mehr ;)
 
Sprich es muss ein Bereich sein, in welchem du einfach die 3 id's in einem input - tag angeben kannst,

Entschuldige,aber was soll denn das? Ich gebe doch keine id`s in input-felder ein! Hab ich ja noch nie von gehört

Ich muss leider weg. Aber es wäre schön, wenn wir uns morgen hier nochmal sehen würden.

Gruß
 
Also die Datenbank vergibt ja automatisch eine id, wenn eine Zeile angelegt wird. Diese wird bei einem Löschvorgang von MySQL nicht mehr freigegeben, da ein internen Zähler ausschl. nur hochzählen kann.

Du kannst aber die id selbst vergeben. Wer sagt denn das du das nicht kannst oder darfst?

Diese drei Nummern oder ID's sind ja nicht als Eintrag in der Tabelle zu vestehen, welche du ständig ändern willst, sondern soll dazu dienen, das User die deine Seite mit der Übersicht anwählen nur die drei Einträge in der DB von dir sehen und das steuerst du mit den drei ID's. Verstehst du jetzt was ich meine?
 
Hallo,

du hast die Datensätze

Code:
id          ord        name
1           1                Datensatz 1
2           2                Datensatz 2
3           3                Datensatz 3
4           4                Datensatz 4

Wenn du den Datensatz 1 auf Position 2 bringen willst müsstest du (so wie ich das verstanden habe) 1 mal auf "Nach unten" klicken.

Du zählst beim klicken auf "Nach unten" beim Datensatz 1 die Ordnungszahl "+1" und der Datensatz 1 Ordnungszahl "+1" ergibt Datensatz 2, auslesen und ändern auf "-1".

Nun sieht das ganze so aus

Code:
id          ord        name
1           2                Datensatz 1
2           1                Datensatz 2
3           3                Datensatz 3
4           4                Datensatz 4

und du kannst es mit ORDER BY ord sortieren.

Ist bisschen kompliziert aber so müssts gehen :-)

mfg
 
Zuletzt bearbeitet:
Hallo,

mich interessiert das grad auch und hab ein kleines Beispiel gemacht, es funktioniert !

PHP:
if($action == ""){
   $b=mysql_query("SELECT * FROM test WHERE id = '$id'"); 
   $a=mysql_fetch_array($b);

   mysql_query("UPDATE test SET ord = ord - 1 WHERE ord = $a[ord] + 1"); 
   mysql_query("UPDATE test SET ord = ord + 1 WHERE id = '$id'"); 
}

if($action == "view"){
   $res=mysql_query("SELECT * FROM test ORDER BY ord"); 
   while($row=mysql_fetch_array($res)) {
      echo "$row[name] <a href='ordnen.php?id=$row[id]'>Nach unten</a><br>";
   }
}

Hier ein kleiner Test

Mit dem Link "Nach unten" kannst du den jeweiligen Datensatz immer um 1 nach unten verschieben, natürlich müsste man das ganze noch anpassen damit beim Letzten Datensatz zB kein "Nach unten" steht.

Für "Nach oben" kannst du dir ja selber was basteln :-)

mfg
 
Zuletzt bearbeitet:
Yau, es funktioniert. Hab aber die query ein bischen anders gemacht.
Nicht mit +1 und -1, sondern hab mir die ordernummer des DS vorher bzw. nacher ausgeben lassen und diese im update eingefügt.

Jetzt klappts wunderbar.
Danke für die Tips
 
So gehts !

PHP:
if(isset($action) && $action == "up"){
 // gibt die ordernumber des selektierten  Datensatzes aus
 $query_on = mysql_query("select id,ordernumber from site where site='$_GET[site]' and contentId='$_GET[cid]'");
 $ordernumber = mysql_fetch_object($query_on);

 // gibt den nächst kleineren DS aus
 $query_kl = mysql_query("select * from site where site='$_GET[site]' and ordernumber < '$ordernumber->ordernumber' order by ordernumber desc limit 1");
 $res = mysql_fetch_assoc($query_kl);
 $numberKl = $res[ordernumber];
 
 mysql_query("update site set ordernumber='$ordernumber->ordernumber' where site='$_GET[site]' and ordernumber='$numberKl'");
 mysql_query("update site set ordernumber='$numberKl' where site='$_GET[site]' and id='$ordernumber->id'");
}

if(isset($action) && $action == "down"){
 // gibt die ordernumber des selektierten  Datensatzes aus
 $query_on = mysql_query("select id,ordernumber from site where site='$_GET[site]' and contentId='$_GET[cid]'");
 $ordernumber = mysql_fetch_object($query_on);

 // gibt den nächst größeren DS aus
 $query_gr = mysql_query("select * from site where site='$_GET[site]' and ordernumber > '$ordernumber->ordernumber' order by ordernumber asc limit 1");
 $res = mysql_fetch_assoc($query_gr);
 $numbergr = $res[ordernumber];

 mysql_query("update site set ordernumber='$ordernumber->ordernumber' where site='$_GET[site]' and ordernumber='$numbergr'");
 mysql_query("update site set ordernumber='$numbergr' where site='$_GET[site]' and id='$ordernumber->id'");
}
 
Zurück