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 :

ligne +1 +1 +1 +1..


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 42
    Points : 39
    Points
    39
    Par défaut ligne +1 +1 +1 +1..
    Bonjour
    J'ai une table avec 3 colonnes: id, catégorie et classement.
    - Mon id est en auto incrémenté
    - j'ai 5 catégories.
    - et j'aimerais que la colonne classement soit remplie par des chiffres entier 1, 2, 3, 4, 5, 6, . pour l'instant toutes les lignes sont = 0;
    et j'aimerais les chiffres recommence à 0 dès que l'on change de catégorie.

    J4ai essayer ça mais ça me met tout le même chiffre alors que je veux +1 a chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    UPDATE table SET classement=classement+ 1 WHERE categories='1'
    Pourriez vous m'aidez svp ! Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 13
    Points : 22
    Points
    22
    Par défaut
    Salut,

    A quoi correspond le classement ? Il y a une logique ?

    Tu souhaite avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1    cat1    1
    2    cat1    2
    3    cat1    3
     
    4    cat2    1
    5    cat2    2
    6    cat2    3
     
    7    cat3    1
    8    cat3    2
    9    cat3    3

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Oui c'est exactement ça !
    sachant qu'il y a environ une centaine de lignes par "cat" j'ai pas envie de me taper tout a écrire donc s'il y a un code pour le faire, je suis preneur

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut infovect.
    Il suffit d'utiliser la propagation d'une variable dans MySql comme ci-après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    USE `essai`;
     
    -- ==================
    -- Remplissage `test`
    -- ==================
     
    set @i:=0;
     
    update `test` set classement=@i:=@i+1 where categorie like 'cat2';
     
    select * from test;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 13
    Points : 22
    Points
    22
    Par défaut
    Salut,

    Exemple plus complet, en bouclant sur toutes les cat :
    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
    CREATE PROCEDURE `increment_cat`()
    BEGIN
      DECLARE done INT DEFAULT 0;
      DECLARE cat VARCHAR(255);
      DECLARE cur1 CURSOR FOR SELECT DISTINCT `categorie` FROM `cat`;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
      OPEN cur1;
     
      the_loop: LOOP FETCH cur1 INTO cat;
     
        IF done = 1 THEN
          LEAVE the_loop;
        END IF;
     
        SET @i = 0;
        UPDATE `cat` SET `classement`=@i:=@i+1 WHERE `categorie` = cat;
     
      END LOOP the_loop;
      CLOSE cur1;
    END//
     
    CALL `increment_cat`();
    http://sqlfiddle.com/#!2/84598c/1

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Et également, une version propre à MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    set @cat = '';
    set @cla = 0;
     
    update LaTable
    	set classement = @cla:= @cla * (categorie=@cat) + (categorie=@cat:=categorie) 
    order by categorie, id;

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut à tous.

    @ aieeeuuuuu : je la trouve légèrement compliqué ta requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set @cat:='';
    set @i:=0;
     
    update `test`
    set classement=@i:=if (categorie=@cat, @i+1, 1), categorie=@cat:=categorie
    order by categorie, id;
    Qu'est-ce que tu en penses ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Oui, c'est un peu plus lisible.

    on peut aussi écrire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update LaTable
    	set classement = @cla := if(@cat=(@cat:=categorie), @cla +1,1) 
    order by categorie, id;

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    apprenti
    Inscrit en
    Juillet 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    MERCI BEAUCOUP !!!!!!
    j'ai réussit a faire ce que je voulais grâce à vous encore merci à vous tous

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut aieeeuuuuu.

    Merci aieeeuuuuu, c'est exactement ce que je voulais comme solution. Juste une question : le calcul se fait-il bien de gauche à droite ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update LaTable
    	set classement = @cla := if(@cat=(@cat:=categorie), @cla +1,1) 
    order by categorie, id;
    Donc le @cat possède la valeur précédente et ne reçoit le résultat de l'affectation @cat:=categorie, qu'après la fin de l'exécution de cette occurrence. Si par contre j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update LaTable
    	set classement = @cla := if((@cat:=categorie)=@cat, @cla +1,1) 
    order by categorie, id;
    j'ai toujours l'égalité. C'est bien cela ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Je ne sais pas, il faudrait voir la doc de MySQL sur ce point.

    C'est juste une technique propre à MySQL qui peut parfois être pratique pour combler ses manques.

    En l’occurrence, il conviendrait d'utiliser une fonction fenêtrée pour répondre au besoin, mais MySQL ne les prends pas en charge.

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    il faudrait voir la doc
    Bah en fait, elle dit qu'il ne faut pas faire ça !!!

    Citation Envoyé par Doc MySQL
    you should never assign a value to a user variable and read the value within the same statement.
    En gros, ils n'implémentent pas la norme SQL, implémentent un truc maison à la place, mais disent qu'il vaut mieux pas l'utiliser parce que ça risque de pas fonctionner

    J'adore la suite :

    Citation Envoyé par Doc Mysql
    ... you might get the results you expect, but this is not guaranteed
    ça pourrait marcher... ou pas

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/08/2002, 07h38
  2. Aide en ligne
    Par étoile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 14h00
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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