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

MySQL Discussion :

UPDATE valeur incrémentée entre chaque ligne


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 6
    Points
    6
    Par défaut UPDATE valeur incrémentée entre chaque ligne
    Bonjour à tous,

    J'ai pas mal googlé et cherché sur developper.com avant de poster mais je n'arrive pas à trouver une réponse à mon problème.

    J'aimerais en une seule requête MySQL mettre à jour la valeur d'un champ sur plusieurs lignes. Jusque là pas de problème. Ca me donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE `data` SET `position`= 1 
    ORDER BY name ASC
    Mais là où je coince, c'est que j'aimerais que la valeur soit incrémenté entre chaque ligne.

    Je m'explique. Je ne veux pas que toutes mes `data` ai `position` à 1. Je voudrais que la première ai `position` à 1, la deuxième `position` à 2, etc.
    Un genre de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE `data` SET `position`= 1++ 
    ORDER BY name ASC
    Mais ce serait aussi simple je ne serais pas là

    Est-ce vraiment possible en une seule requête MySQL ? Et si oui comment ?

    J'espère aoir été assez clair
    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Si tu es le troisième, ça veut dire qu'il y en a deux avant toi, ou, autrement dit, il y en a trois inférieurs ou égaux à toi (l'égal étant toi-même)... Donc la position d'une ligne est le nombre de lignes inférieures ou égales.

    version logique, qui va se heurter à l'interdiction de lire et modifier la même table en même temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE `data` t1 
    SET position = (
      SELECT COUNT(*) 
      FROM `data` t2 
      WHERE t2.name <= t1.name)
    contournement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE `data` t1 
    SET position = (
      SELECT COUNT(*) 
      FROM (SELECT * FROM `data`) t2 
      WHERE t2.name <= t1.name)
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci pour cette réponse rapide

    Ça fonctionne !

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

Discussions similaires

  1. [AC-2007] Calcul d'écart de valeur entre chaque ligne d'un champ d'une requête
    Par Ahlmael dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/12/2014, 11h54
  2. [XL-MAC 2011] Insérer 2 Lignes entre chaque ligne de la sélection
    Par olibxl dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/01/2013, 11h49
  3. [CSS] [FAQ] Comment mettre une bordure entre chaque lignes d'un tableau
    Par tzilliox dans le forum Contribuez
    Réponses: 0
    Dernier message: 12/10/2009, 11h37
  4. Réponses: 3
    Dernier message: 08/04/2009, 12h10
  5. [DOM] DOM mettre des espaces entre chaque ligne
    Par gentil dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 02/04/2009, 17h35

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