Inverser 2 lignes

Résolu
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009 - 21 févr. 2006 à 13:58
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 - 23 févr. 2006 à 00:13
bonjour,

Je cherche un moyen pour ordoner mon menu grace à un lien du type "up"/"down" suivant le cas.
Mais pour cela je pense devoir inverser 2 ligne pour incrémenter de 1 ou -1 l'ordre.
J'ai essayer cette methode mais mon problème est que ma première requete ne s'exécute pas
quelqu'un aurait il une idée?
merci d'avance

if($_GET['mod'] == 'plus') {
//celui qui monte UPDATE `tickets` SET ordre=3 WHERE ordre= 2
mysql_query("UPDATE $matable SET ordre =(".$_GET['ordre']."+1) WHERE ordre=".$_GET['ordre']);
//celui qui descend UPDATE `tickets` SET ordre=2 WHERE ordre= 3
mysql_query("UPDATE $matable SET ordre=".$_GET['ordre']." WHERE ordre=(".$_GET['ordre']."+1)");
}


if($_GET['mod'] == 'moins') {
//celui qui descend UPDATE `tickets` SET ordre=3 WHERE ordre= 2
mysql_query("UPDATE $matable SET ordre =(".$_GET['ordre']."+1) WHERE ordre=".$_GET['ordre']);
//celui qui monte UPDATE `tickets` SET ordre=2 WHERE ordre= 3
mysql_query("UPDATE $matable SET ordre=".$_GET['ordre']." WHERE ordre=(".$_GET['ordre']."+1)");
}

3 réponses

Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
23 févr. 2006 à 00:13
Par ID, je voulais dire le champ ordre, bien entendu ;o)

la solution existe :
Tu passes l'ancien ordre au negatif nouveau,
puis tu passes le nouveau a l'ancien,
puis tu passes le negatif nouveau au nouveau,

Exemple : a 2 / b 3

UPDATE $img SET ordre_page -($ordre+1) WHERE ordre_page $ordre
UPDATE $img SET ordre_page $ordre WHERE ordre_page ($ordre+1)
UPDATE $img SET ordre_page $ordre+1 WHERE ordre_page -($ordre+1)

et voila ! ;o)
3
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
22 févr. 2006 à 11:27
Ta première requete s'execute bien :

Départ :
a - 2
b - 3
Premiere requete :
a - 2
b - 2
Deuxieme requete :
a - 3
b - 3

Puisque tu te bases uniquement sur l'ordre...
a mon avis, le mieux serait soit de baser ta requete sur l'id. exemple :
"remonter b"
Départ
a - 2
b - 3
Premiere requete : je modifie l'id 3
a - 2
b - 2
Deuxieme requete : je modifie l'id 2 de tout ce qui n'est pas b
a - 3
b - 2

Ou alors passer par la valeur -1 :
Départ
a - 2
b - 3
Premiere requete : je modifie la valeur3
a - 2
b - (-1)
Deuxieme requete : je modifie la valeur 2
a - 3
b - (-1)
Troisieme requete : je modifie la valeur -1
a - 3
b - 2

Mindiell Software
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
22 févr. 2006 à 22:54
bonsoir,

merci pour ton aide et cette réflexion

j'ai une table avec plusieurs id primaire et toucher à l'id est assez lourd pour moi à maneuvrer.
Donc j'ai trouver une astuce en créant un champs pour l'ordre temporaire pcq j'ai essayer 2 requetes uniquement mais impossible à faire tourner sans ecraser la valeur

voici ce que j'ai fait (à optimiser surement) et je cherche toujours le moyen pour eviter le champs temporaire je vais encore essayer avec l'id car il y a surement moyen de conserver l'ordre en mémoire pour les requetes
si tu trouves une meilleur solution fais le moi savoir sinon j'espère que ce code pourra t'aider ou aider quelqu'un car sur goo par exemple j' ai pas trouver de solution de ce type.
encore merci pour ton aide
Enfin soit:

if($_GET){
$ordre=$_GET['ordre'];//2
$img=$_GET['img'];//table
$lang=$_GET['lang'];//lang
}
if($_GET['mod'] == 'plus') {
$ordre1=$ordre+1;//3
$ordre2=$ordre;//2
mysql_query("UPDATE $img SET ordre_page ='$ordre1' WHERE ordretemp='$ordre'");
mysql_query("UPDATE $img SET ordre_page='$ordre' WHERE ordretemp='$ordre1'");
$requete= mysql_query('SELECT `ordre_page` FROM '.$img);
while($result = mysql_fetch_array($requete))
{
$ordre = $result['ordre_page'];
$sql=mysql_query("UPDATE $img SET ordretemp ='$ordre' WHERE ordre_page='$ordre'");
}
}


if($_GET['mod'] == 'moins') {
$ordre1=$ordre-1;//3
$ordre2=$ordre;//2
mysql_query("UPDATE $img SET ordre_page ='$ordre1' WHERE ordretemp='$ordre'");
mysql_query("UPDATE $img SET ordre_page='$ordre' WHERE ordretemp='$ordre1'");
$requete= mysql_query('SELECT `ordre_page` FROM '.$img);
while($result = mysql_fetch_array($requete))
{
$ordre = $result['ordre_page'];
$sql=mysql_query("UPDATE $img SET ordretemp ='$ordre' WHERE ordre_page='$ordre'");
}
}

//redirection
header("Location: ../index.php?lang=$lang&adm=menu&img=$img") ;
0
Rejoignez-nous