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

Requêtes MySQL Discussion :

inverser deux valeur sur un champ UNIQUE


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut inverser deux valeur sur un champ UNIQUE
    Bonjour a tous,

    Voila j'ai un table avec un champ sort_order UNIQUE.

    Je souhaiterais pouvoir changer l'order de deux ligne en inversant leur valeur.
    j'avais donc penser réaliser deux update a la suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tep_db_query("update " . TABLE_CAROUSEL_INDEX . " set sort_order = sort_order - 1 where carousel_index_id = '" . (int)$HTTP_GET_VARS['ci_id'] . "'");
    tep_db_query("update " . TABLE_CAROUSEL_INDEX . " set sort_order = sort_order + 1 where carousel_index_id = '" . (int)$audessus['classification_id'] . "'");
    Mais le probleme c'est que la premier requete ne peut pas se réaliser car du coup deux valeur seront identique?

    du coup comment faire?
    j'ai bien penser faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tep_db_query("update " . TABLE_CAROUSEL_INDEX . " set sort_order = sort_order +1000 where carousel_index_id = '" . (int)$HTTP_GET_VARS['ci_id'] . "'");
    tep_db_query("update " . TABLE_CAROUSEL_INDEX . " set sort_order = sort_order + 1 where carousel_index_id = '" . (int)$audessus['classification_id'] . "'");		
    tep_db_query("update " . TABLE_CAROUSEL_INDEX . " set sort_order = sort_order -1001 where carousel_index_id = '" . (int)$HTTP_GET_VARS['ci_id'] . "'");
    Mais c'est vraiment pas propre comme developpement. je pense qu'il doit exister un soluce plus adapté

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    C'est impossible, car MySQL n'est pas relationnel, pas ensembliste et ne sait donc pas faire des traitements autrement que ligne à ligne !!!
    Vive MySQL qui est un pseudo SGBDR !
    A lire sur le sujet :
    http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

    A +

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut merci
    Merci pour votre réponse

    Donc ma solution du +1000 , puis -999, elle la solution recommandé?

    p.s::sachant que j'aurais 10 - 30 de ligne maximum donc +1000 est largement suffisant
    Merci

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    une solution peut être, si tu utilises de l'int(4) par exemple de:
    faire les updates en faisant ton +/-1 mais en inversant le résultat:
    • -(val+1)=-val-1
    • -(val-1)=-val+1

    ensuite refais tes updates en repassant en positif tes valeurs...

    c'est pas top, mais ça fait le job, puisqu'à aucun moment tu as de doublon grâce à cette phase intermédiaire...

    je te conseille de faire ça grâce à une procédure stockée qui engloberas tes 4 update plutôt que de le faire avec 4 allers-retours php mysql...

    mais ta solution marche aussi bien, au pire tu peux verrouiller la table le temps de la mise à jour, pour éviter des accès le temps de la manipulation.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/07/2009, 11h06
  2. inverser deux valeurs dans une meme table.
    Par sabotage dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 08h48
  3. Comparer deux valeurs d'un champ
    Par goulhasch dans le forum Macro
    Réponses: 7
    Dernier message: 13/09/2007, 09h44
  4. 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
  5. regroupement de valeurs sur un champs
    Par Sami Xite dans le forum Access
    Réponses: 26
    Dernier message: 16/01/2007, 17h14

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