Inverser 2 lignes [Résolu]

mariobotta 57 Messages postés samedi 30 avril 2005Date d'inscription 12 septembre 2009 Dernière intervention - 21 févr. 2006 à 13:58 - Dernière réponse : Mindiell 559 Messages postés jeudi 25 juillet 2002Date d'inscription 5 septembre 2007 Dernière intervention
- 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)");
}
Afficher la suite 

Votre réponse

3 réponses

Mindiell 559 Messages postés jeudi 25 juillet 2002Date d'inscription 5 septembre 2007 Dernière intervention - 23 févr. 2006 à 00:13
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Mindiell
Mindiell 559 Messages postés jeudi 25 juillet 2002Date d'inscription 5 septembre 2007 Dernière intervention - 22 févr. 2006 à 11:27
0
Utile
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
Commenter la réponse de Mindiell
mariobotta 57 Messages postés samedi 30 avril 2005Date d'inscription 12 septembre 2009 Dernière intervention - 22 févr. 2006 à 22:54
0
Utile
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") ;
Commenter la réponse de mariobotta

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.