Inverser 2 lignes

Résolu
Signaler
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
-
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

Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
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)
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
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
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

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") ;