Anordnung der Auflistung bearbeiten (hoch / runter - verschieben)

WACSF

Erfahrenes Mitglied
Guten Tag.

Wieder mal habe ich ein Problem. Ich weiß nicht wie man dieses Vorhaben von mir bezeichnet, somit wusste ich nicht mal nach was ich suchen musste.
Ich habe einen Linkindex, der mit verschiedenen Kategorien arbeitet. In den Kategorien befinden sich mehrere Links. Bis jetzt werden die Links nach ihren IDs angeordnet. Ich will aber die Möglichkeit haben, dass ich die Links sozusagen anordenen kann. Bei der Onlinevideothek Amango kann man in seiner Wunschliste die DVDs eine Stufe weiter nach oben schieben. Ich dachte mir, dass es auch möglich sein sollte, dass ich meine Links in der Kategorien nach meinen Wünschen anordnen kann. Ich danke mir, dass ich eine zusätzliche Spalte mache und hier irgendwie einen Wert einsetze, den ich dann herauf, oder heruntersetzen kann. Zudem müsste dieser Wert von der Kategorie abhängig sein, so dass ich nur innerhalb der Kategorie die Links in der Rangordnung verändern kann.
Ich habe bis jetzt folgende MYSQL Tabellen (eine für die Kategorien / eine für die Links):
PHP:
CREATE TABLE wtv_link_kat(
  				KATID int(5) NOT NULL auto_increment,
  				KATEGORIE_DE varchar(100) NOT NULL default '',
				KATEGORIE_EN varchar(100) NOT NULL default '',
  				PRIMARY KEY  (ID)
				) TYPE=MyISAM"; 
// Und hier für die Links
CREATE TABLE wtv_link (
  				LINKID int(5) NOT NULL auto_increment,
  				NAME_DE varchar(100) NOT NULL default '',
				KAT_DE varchar(100) NOT NULL default '',
				NAME_EN varchar(100) NOT NULL default '',
				KAT_EN varchar(100) NOT NULL default '',
				URL_DE varchar(255) NOT NULL default '',
				URL_EN varchar(255) NOT NULL default '',
				PRIMARY KEY  (ID)
				) TYPE=MyISAM

Vielleicht habt ihr eine gute Idee, wie ich mein Vorhaben umsetzen kann.
Achja, ich hoffe, dass ihr mein Vorhaben versteht, weil ich nicht weiß, wie man soetwas bezeichnen kann.

Danke schonmal,

WACSF
 
WACSF hat gesagt.:
Achja, ich hoffe, dass ihr mein Vorhaben versteht, weil ich nicht weiß, wie man soetwas bezeichnen kann.
Sortierung vieleicht?

Leg einfach eine zusätzliche Spalte `sortnr` an, die muß für jede Kategorie getrent fortlaufend durchnummeriert sein!

Zum Thema Sortierung wurde hier schon einiges geschrieben.

Bei Neueinträgen mußt Du vorher noch max(sortnr)+1 where KAT_DE=$KAT_DE feststellen ...

BTW
Ich würd in der wtv_link nur die KATID der wtv_link_kat erfassen, Stichwort Normalisierung.
 
HIHO erstmal und danke für den Hinweis.
Nur habe ich leider keinen einzigen Beitrag gefunden ("SW: Sortierung/sortiren"), der mir bei meinem Problem hilf.
Mit dem Vorschlag der sortnr ist gut, nur habe ich ja nur diese eine Spalte, in der die Nummern der Sortierung gespeichert sind, und diese Spalte wäre ja dann Kategorienübergreifen. ICh glaube ich müsste noch soetwas wie eine Spezifikation der Kategorie einbringen.

z.B.
Link1 - Kat1 - Kat1sortnr.1
Link2 - Kat1 - Kat1sortnr.2
usw.
Link1 - Kat2 - Kat2sortnr.1
Link2 - Kat2 - Kat2sortnr.2
usw.

Wenn das möglich ist, kann ich die Katsortnr. mit einem Update tauschen. Nur wie geht das in der umsetzung, wenn ich von einer Auflistung der Links mit einem "hoch"-"runter"-Pfeil die Rangordnung festlegen will.
Die Auflistung meines Linkindex wurde in diesem Board schon ausgiebig behandelt (Mslap, Command). Diese Auflistung will ich eben u.a. mit diesem Rangordnungssystem erweitern.

PHP:
<?php 
include("dbconnect.php"); 
$get = mysql_query("SELECT kat.KATID,kat.KATEGORIE_$lang,link.NAME_$lang,link.URL_$lang,link.KAT_$lang FROM wtv_link_kat as kat, wtv_link as link WHERE link.KAT_$lang = kat.KATEGORIE_$lang ORDER BY link.KAT_$lang"); 
$str = '<table width="626" border="0" cellspacing="0" cellpadding="0">'; 
$old_kat = ""; 
while($row = mysql_fetch_array($get)){ 
    $str .="<tr>"; 
   if($old_kat!=$row['KAT_'.$lang.'']){ 
   $str.="<td width='177'><div align='left'><font face='Times New Roman, Times, serif'><strong>".$row['KAT_'.$lang.''].":</strong></font></div></td>"; 
}else{ 
   $str.="<td></td>";} 
   $str.="<td><div align='justify'><font face='Times New Roman, Times, serif'><a href='".$row['URL_'.$lang.'']."' target='_blank'>".$row['NAME_'.$lang.'']."</a></font></div></td> 
  </tr>"; 
  $old_kat = $row['KAT_'.$lang.'']; 
} 
$str .= '</table>'; 
echo $str; 
?>
Dies aber nur so als Zusatzinfo.

Ich wäre für weitere hilfreiche Schritte dankbar,

WACSF
 
Hallo,

so etwas hatten wir schon mal ...

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'"); 
   echo "<a href='anordnen.php?action=view'>zur&uuml;ck</a>";
}

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

mfg
 
German hat gesagt.:
Bei Neueinträgen mußt Du vorher noch max(sortnr)+1 where KAT_DE=$KAT_DE feststellen

Guten Tag erstmal. Ich war leider in den letzten Wochen nicht da, somit kann ich erst jetzt zurückschreiben. Ich danke euch für die Hilfe, nur habe ich da noch eine Frage zu oben zitierten. Wie kann ich in einer Spalte Sortnr. für jeden Link, der in eine Kategorie eingeordnet ist, eine für ihn eigene Nummer erstellen. Ich kann doch sowas wie ein autoincrement (siehe ID) machen, nur dann werden die Links ja nicht innerhalb der Kategorie mit festen nummern besetzt. Ich hoffe ihr versteht mein Problem.

Achja, ich wäre sehr dankbar für eine kurze Erklärung des o.g. Codeschnipsels.

Bye,

WACSF
 
WACSF hat gesagt.:
... nur dann werden die Links ja nicht innerhalb der Kategorie mit festen nummern besetzt. Ich hoffe ihr versteht mein Problem.

Achja, ich wäre sehr dankbar für eine kurze Erklärung des o.g. Codeschnipsels.
Genau darum gehts. Du hast eine Spalte sortnr mit 1, 2, 3, ... für Kat. 1; 1, 2, 3, ... für Kat. 2, usw. Wenn jetzt ein Neueintrag kommt stellst Du mit "SELECT max(sortnr)+1 AS nextsort FROM article WHERE KAT_DE=$KAT_DE" fest wie die sortnr für den Neueintrag lauten muß. Oder Du erhöhst mit "UPDATE article SET sortnr = sortnr+1 WHERE KAT_DE=$KAT_DE" alle Artikel um 1 und gibst dem Neuen die 1, dann steht er halt ganz am Anfang ...
Dieses "... WHERE KAT_DE=$KAT_DE" brauchst Du dann selbstverständlich auch bei den "hoch"-"runter"-Pfeilen.
 
Zurück