IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Inverser deux entrées [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut Inverser deux entrées
    Bonsoir à toutes et à tous.

    Après recherches, je ne trouve pas de réponses à mon problème,
    Je m'explique, j'aimerais, si c'est possible inverser deux entrées comme ceci

    id nom ordre
    1 dupont 1
    2 dupuis 2
    3 martin 3

    id nom ordre
    1 dupont 2
    2 dupuis 1
    3 martin 3

    J'ai fais ceci :

    Pour monter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql_query("UPDATE table SET ordre=".($test['ordre']-1)." WHERE id=".$test['id']."") or die(mysql_error());
    mysql_query("UPDATE table SET ordre=".$test['ordre']." WHERE id=".($test['id']-1)."") or die(mysql_error());
    Pour descendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql_query("UPDATE table SET ordre=".($test['ordre']+1)." WHERE id=".$test['id']."") or die(mysql_error());
    mysql_query("UPDATE table SET ordre=".$test['ordre']." WHERE id=".($test['id']+1)."") or die(mysql_error());
    Mais ça ne fonctionne pas correctement, cela fait plusieurs jours que je suis dessus et je ne comprends même plus moi même ce que je fais.

    Pourriez vous me remettre sur les rails

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Que valent les variables $test['ordre'] et $test['id'] ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Bonjour CinePhil,

    Alors voila ce que valent les variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE table SET ordre="(2-1)." WHERE id="(2)"") or die(mysql_error());
    Donc le champs ordre de l'ID2 devient 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE table SET ordre="(2)" WHERE id="(id-1)"") or die(mysql_error());
    Et le champs ordre de l'ID1 devient 2-1 soit 1


    Mais ce qui m'embête c'est que quand je me réfère à l'id-1 et que l'ordre du champ ordre devient 15342 ça ne fonctionne plus

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE table SET ordre="(5-1)." WHERE id="(2)"") or die(mysql_error());
    Donc le champs ordre de l'ID2 devient 4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE table SET ordre="(5)" WHERE id="(id-1)"") or die(mysql_error());
    Et le champs ordre de l'ID1 devient 5-1 soit 4

    Je n'arrive pas à faire en sorte que l'ordre de l'ID1 devient 5 et l'ordre de l'ID5 devient 1

    Et cela ne fonctionne plus, je pense que je devrais faire un "order by ordre" et me référer au champ ordre plutôt qu'à celui de l'ID.

    Je ne sais pas si j'arrive à me faire comprendre...

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    je viens de trouver mais au petit bonheur la chance

    Pour ceux que cela intéresserait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_query("UPDATE table SET ordre=".$test['ordre']." WHERE ordre=".($test['ordre']-1)."") or die(mysql_error());
    mysql_query("UPDATE table SET ordre=".($test['ordre']-1)." WHERE id=".$id."") or die(mysql_error());
    En inversant les deux lignes cela à résolu le problème.

    Ce que je ne comprends pas, c'est que la référence qui est l'ID se trouve à la deuxième ligne...

    Je suis à moitié content parce que je n'ai pas bien compris la manipulation.
    Donc je risque de recaler au prochain problème de ce genre.
    Si quelqu'un pouvais m'expliquer



    Merci!

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai mis des commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    // [........]
    // *************************************
    // Traitement : MONTER une LIGNE (on change sa position dans l ordre d affichage)
    // *************************************
    if ($traiter == 'MONTER')
    {
    	$id 		= mysql_real_escape_string(intval($_POST['id']));
    	$ordre 		= mysql_real_escape_string(intval($_POST['ordre']));
    	// ----------------------
    	// on descend d abord la LIGNE du dessus
    	$query_update 	= "UPDATE LaTable SET ".
    			" ordre = 	'".$ordre."' ".
    			" WHERE ordre = '".($ordre-1)."';";
    	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    	// on remonte ensuite la LIGNE d un cran
    	$query_update 	= "UPDATE LaTable SET ".
    			" ordre = 	'".($ordre-1)."' ".
    			" WHERE id = 	'".$id."';";
    	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    }
    // *************************************
    // Traitement : DESCENDRE une LIGNE (on change sa position dans l ordre d affichage)
    // *************************************
    elseif ($traiter == 'DESCENDRE')
    {
    	$id 		= mysql_real_escape_string(intval($_POST['id']));
    	$ordre 		= mysql_real_escape_string(intval($_POST['ordre']));
    	// ----------------------
    	// on remonte d abord la LIGNE du dessus
    	$query_update 	= "UPDATE LaTable SET ".
    			" ordre = 	'".$ordre."' ".
    			" WHERE ordre =	'".($ordre+1)."';";
    	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    	// on descend ensuite la LIGNE d un cran
    	$query_update 	= "UPDATE LaTable SET ".
    			" ordre = 	'".($ordre+1)."' ".
    			" WHERE id = 	'".$id."';";
    	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    }
    // *************************************
    ?>
    Dernière modification par Invité ; 23/07/2011 à 17h55.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Bonjour jreaux62,

    Ok c'est plus clair maintenant, je crois que j'ai compris, merci jreaux62!

    A+ bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. inverser deux valeurs dans une meme table.
    Par sabotage dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 08h48
  2. tableau a deux entrées ?
    Par RR instinct dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 14/12/2007, 10h25
  3. Requete MySQL en inversant deux mots d'un champ ?
    Par sonno dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/04/2007, 10h52
  4. [FORMULAIRE] Tableau à deux entrées...
    Par ip203 dans le forum IHM
    Réponses: 2
    Dernier message: 09/03/2006, 11h48
  5. fusionner les donéées de deux entrées
    Par melodynelson dans le forum Access
    Réponses: 5
    Dernier message: 18/11/2005, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo