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 :

Insérer Numérotation par famille [MySQL-5.6]


Sujet :

MySQL

  1. #1
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut Insérer Numérotation par famille
    Salut à tous et bonne année

    Donc je bloque... Si vous pouvez m'aidez svp...

    J'ai une base comme celle ci :


    Prenom Course ClassementGeneral Sex ClassementHommes ClassementFemmes
    Marc leMans2005 1 H
    Jeanne leMans2005 2 F
    Mireille leMans2005 3 F
    Bruno leMans2005 4 H
    Maurice Monaco2006 1 H
    Christian Monaco2006 2 H
    Sylvie Monaco2006 3 F
    corinne Monaco2006 4 F
    Bernadette Monaco2006 4 F
    Elise Monaco2006 6 F

    et je voudrai remplir comme ceci (voir tableau suivant) les colonnes "ClassementHommes" et "ClassementFemmes" par courses avec gestion des ex æquo

    Prenom Course ClassementGeneral Sex ClassementHommes ClassementFemmes
    Marc leMans2005 1 H 1
    Jeanne leMans2005 2 F 1
    Mireille leMans2005 3 F 2
    Bruno leMans2005 4 H 2
    Maurice Monaco2006 1 H 1
    Christian Monaco2006 2 H 2
    Sylvie Monaco2006 3 F 1
    corinne Monaco2006 4 F 2
    Bernadette Monaco2006 4 F 2
    Elise Monaco2006 6 F 4



    Je ne veut pas tout rentrer à la main... Possible ou pas possible de faire ça ?!
    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    C'eut été très simple avec un SGBD moderne, c'est à dire autre que MySQL, vous auriez pu utiliser une fonction de fenêtrage en partitionnant sur le code sexe.

    Cela étant, votre modélisation n'est pas propre : vous devriez n'avoir qu'une seule colonne de classement, qui prendrait par exemple la valeur 1 pour le 1er classé masculin ET pour le 1er classé féminin plutôt que d'avoir deux colonnes dont une qui ne sert à rien pour la moitié de la population

  3. #3
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Citation Envoyé par Escartefigue
    C'eut été très simple avec un SGBD moderne, c'est à dire autre que MySQL, vous auriez pu utiliser une fonction de fenêtrage en partitionnant sur le code sexe.
    J'attends ta démonstration ! Car j'aurai aimé savoir comment tu fais pour gérer les ruptures de séquences avec le fenêtrage.

    Citation Envoyé par Escartefigue
    Cela étant, votre modélisation n'est pas propre : vous devriez n'avoir qu'une seule colonne de classement, qui prendrait par exemple la valeur 1 pour le 1er classé masculin ET pour le 1er classé féminin plutôt que d'avoir deux colonnes dont une qui ne sert à rien pour la moitié de la population
    Sur ce point, tu as raison !
    Comme j'ai respecté sa demande, je me retrouve avec deux colonnes de type 'char' afin d'introduire un blanc comme elle n'est pas renseignée.
    Normalement avec une seule colonne de type 'tinyint', le problème ne se pose pas !

    @ Le Néophyte : il y a un truc que je n'aime vraiment pas, ce sont les noms en rallonge.
    'clagen' pour classement général suffit largement à sa compréhension.

    Voici comment faire avec une procédure stockée. J'ai utilisé deux astuces.
    1) la rupture de séquence sur le nom de la course.
    Quand il y a rupture, je remets les compteurs à zéro, sinon je fais cptr = cptr + 1.

    2) la rupture de séquence sur le classement général.
    J'utilise le fait que la mise à jour est faite sur le triplé (course ; sexe; classement général).
    Si je ne fais pas de rupture, tu auras pour les femmes un classement ex aequo mais à 3.
    Avec la rupture, le classement ex aequo est à 2. Pourquoi ?
    Car le update va modifier deux fois les mêmes lignes.
    Donc avec la rupture, la seconde modification ne se fait pas.
    Voici l'exemple :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    create table `test` (
      `id`                 tinyint unsigned auto_increment NOT NULL PRIMARY KEY,
      `prenom`             char(10)                        NOT NULL,
      `course`             char(10)                        NOT NULL,
      `classementGeneral`  tinyint unsigned                NOT NULL,
      `sex`                char(01)                        NOT NULL,
      `classementHommes`   char(10)                        NOT NULL default 0,
      `classementFemmes`   char(10)                        NOT NULL default 0
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`prenom`, `course`,`classementGeneral`,`sex`) values
    ('Marc',       'leMans2005', 1, 'H'),
    ('Jeanne',     'leMans2005', 2, 'F'),
    ('Mireille',   'leMans2005', 3, 'F'),
    ('Bruno',      'leMans2005', 4, 'H'),
    ('Maurice',    'Monaco2006', 1, 'H'),
    ('Christian',  'Monaco2006', 2, 'H'),
    ('Sylvie',     'Monaco2006', 3, 'F'),
    ('corinne',    'Monaco2006', 4, 'F'),
    ('Bernadette', 'Monaco2006', 4, 'F'),
    ('Elise',      'Monaco2006', 6, 'F')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+------------+------------+-------------------+-----+------------------+------------------+
    | id | prenom     | course     | classementGeneral | sex | classementHommes | classementFemmes |
    +----+------------+------------+-------------------+-----+------------------+------------------+
    |  1 | Marc       | leMans2005 |                 1 | H   | 0                | 0                |
    |  2 | Jeanne     | leMans2005 |                 2 | F   | 0                | 0                |
    |  3 | Mireille   | leMans2005 |                 3 | F   | 0                | 0                |
    |  4 | Bruno      | leMans2005 |                 4 | H   | 0                | 0                |
    |  5 | Maurice    | Monaco2006 |                 1 | H   | 0                | 0                |
    |  6 | Christian  | Monaco2006 |                 2 | H   | 0                | 0                |
    |  7 | Sylvie     | Monaco2006 |                 3 | F   | 0                | 0                |
    |  8 | corinne    | Monaco2006 |                 4 | F   | 0                | 0                |
    |  9 | Bernadette | Monaco2006 |                 4 | F   | 0                | 0                |
    | 10 | Elise      | Monaco2006 |                 6 | F   | 0                | 0                |
    +----+------------+------------+-------------------+-----+------------------+------------------+
    --------------
    drop procedure `trait`
    --------------
     
    ERROR 1305 (42000) at line 60: PROCEDURE base.trait does not exist
    --------------
    create procedure `trait` ()
    DETERMINISTIC
    NO SQL
    BEGIN
    DECLARE _rupt  tinyint unsigned DEFAULT 0;
    DECLARE _prec  CHAR(10)         DEFAULT NULL;
     
    DECLARE _cour  CHAR(10)         DEFAULT NULL;
    DECLARE _sex   CHAR(01)         DEFAULT NULL;
    DECLARE _clas  tinyint unsigned DEFAULT NULL;
    DECLARE _chom  CHAR(10)         DEFAULT '';
    DECLARE _cfem  CHAR(10)         DEFAULT '';
     
    DECLARE _hom   tinyint unsigned DEFAULT 0;
    DECLARE _fem   tinyint unsigned DEFAULT 0;
     
    DECLARE _fin  INTEGER           DEFAULT 1;
     
    DECLARE _tab  CURSOR FOR SELECT course, sex, classementGeneral FROM test ORDER BY course, classementGeneral;
     
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
     
     
    OPEN  _tab;
    FETCH _tab INTO _cour, _sex, _clas;
    WHILE (_fin)
    DO
      if (_prec != _cour) then SET _hom = 0;        SET _fem = 0;                       end if;
      if (_sex   =   'H') then SET _hom = _hom + 1; SET _chom = _hom; SET _cfem = '';   end if;
      if (_sex   =   'F') then SET _fem = _fem + 1; SET _chom = '';   SET _cfem = _fem; end if;
     
      if (_rupt != _clas) then
         update `test` set classementHommes = _chom,
                           classementFemmes = _cfem
         where course            = _cour
         and   classementGeneral = _clas
         and   sex               = _sex;
      end if;
     
      SET _prec = _cour;
      SET _rupt = _clas;
     
      FETCH _tab INTO _cour, _sex, _clas;
    END WHILE;
     
    CLOSE _tab;
    END
    --------------
     
    --------------
    CALL trait()
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+------------+------------+-------------------+-----+------------------+------------------+
    | id | prenom     | course     | classementGeneral | sex | classementHommes | classementFemmes |
    +----+------------+------------+-------------------+-----+------------------+------------------+
    |  1 | Marc       | leMans2005 |                 1 | H   | 1                |                  |
    |  2 | Jeanne     | leMans2005 |                 2 | F   |                  | 1                |
    |  3 | Mireille   | leMans2005 |                 3 | F   |                  | 2                |
    |  4 | Bruno      | leMans2005 |                 4 | H   | 2                |                  |
    |  5 | Maurice    | Monaco2006 |                 1 | H   | 1                |                  |
    |  6 | Christian  | Monaco2006 |                 2 | H   | 2                |                  |
    |  7 | Sylvie     | Monaco2006 |                 3 | F   |                  | 1                |
    |  8 | corinne    | Monaco2006 |                 4 | F   |                  | 2                |
    |  9 | Bernadette | Monaco2006 |                 4 | F   |                  | 2                |
    | 10 | Elise      | Monaco2006 |                 6 | F   |                  | 4                |
    +----+------------+------------+-------------------+-----+------------------+------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Si la réponse est satisfaisante, tu nous mets à tous, un +1 et tu fermes ton sujet.

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

  4. #4
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut
    Super !! merci

    Mais Mysql me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE  `trait` ( ) DETERMINISTIC NO SQL BEGIN DECLARE _rupt TINYINT UNSIGNED DEFAULT 0;
    Je ne sais pas pourquoi..

  5. #5
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Le Néopyte.

    Je ne suis pas devin. Peux-tu me donner le message d'erreur que tu obtiens ?
    Et tu l'obtiens à partir de quoi ? En ligne de commande ? Sous PhpMyAdmin ?

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

  6. #6
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut Le Néopyte.

    Je ne suis pas devin. Peux-tu me donner le message d'erreur que tu obtiens ?
    Et tu l'obtiens à partir de quoi ? En ligne de commande ? Sous PhpMyAdmin ?

    @+
    Ah oui pardon : (avec Phpmyadmin)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Erreur
    Requête SQL:
     
    CREATE PROCEDURE  `trait` ( ) DETERMINISTIC NO SQL BEGIN DECLARE _rupt TINYINT UNSIGNED DEFAULT 0;
     
     
    MySQL a répondu: Documentation
     
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5

  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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Le Néophyte.

    A l'exécution, il y a des choses qui n'apparaissent, d'où l'erreur que tu obtiens.
    Désolé mais j'ai modifié l'exemple, afin de le stocker dans mes archives.
    Cette fois-ci, je te donne le source :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ======================
    -- Base de Données `base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`;
     
    USE `base`;
     
    -- ============
    -- Table `test`
    -- ============
     
    DROP TABLE IF EXISTS `test`;
     
    create table `test` (
      `id`       tinyint unsigned auto_increment NOT NULL PRIMARY KEY,
      `prenom`   char(10)                        NOT NULL,
      `course`   char(12)                        NOT NULL,
      `clagen`   tinyint unsigned                NOT NULL,
      `sexe`     char(01)                        NOT NULL,
      `clahom`   char(10)                        NOT NULL default '-',
      `clafem`   char(10)                        NOT NULL default '-'
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =======================
    -- Insertion dans `test`
    -- =======================
     
    insert into `test` (`prenom`, `course`,`clagen`,`sexe`) values
    ('Marc',       'le Mans 2005', 1, 'H'),
    ('Jeanne',     'le Mans 2005', 2, 'F'),
    ('Mireille',   'le Mans 2005', 3, 'F'),
    ('Bruno',      'le Mans 2005', 4, 'H'),
    ('Maurice',    'Monaco  2006', 1, 'H'),
    ('Christian',  'Monaco  2006', 2, 'H'),
    ('Sylvie',     'Monaco  2006', 3, 'F'),
    ('corinne',    'Monaco  2006', 4, 'F'),
    ('Bernadette', 'Monaco  2006', 4, 'F'),
    ('Elise',      'Monaco  2006', 6, 'F');
     
    -- ================
    -- Vidage de `test`
    -- ================
     
    select * from test;
     
    -- =================
    -- Procédure stockée
    -- =================
     
    drop procedure `trait`;
     
    delimiter $$
    create procedure `trait` ()
    DETERMINISTIC
    NO SQL
    BEGIN
    DECLARE _rupt  tinyint unsigned DEFAULT 0;
    DECLARE _clas  tinyint unsigned DEFAULT NULL;
     
    DECLARE _prec  CHAR(12)         DEFAULT NULL;
    DECLARE _cour  CHAR(12)         DEFAULT NULL;
     
    DECLARE _sex   CHAR(01)         DEFAULT NULL;
    DECLARE _chom  CHAR(10)         DEFAULT '';
    DECLARE _cfem  CHAR(10)         DEFAULT '';
     
    DECLARE _hom   tinyint unsigned DEFAULT 0;
    DECLARE _fem   tinyint unsigned DEFAULT 0;
     
    DECLARE _fin  INTEGER           DEFAULT 1;
     
    DECLARE _tab  CURSOR FOR SELECT course, sexe, clagen FROM test ORDER BY course, clagen;
     
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
    -- =========================================================================================================
     
    OPEN  _tab;
    FETCH _tab INTO _cour, _sex, _clas;
    WHILE (_fin)
    DO
      if (_prec != _cour) then SET _hom = 0;        SET _fem = 0;                       end if;
      if (_sex   =   'H') then SET _hom = _hom + 1; SET _chom = _hom; SET _cfem = '';   end if;
      if (_sex   =   'F') then SET _fem = _fem + 1; SET _chom = '';   SET _cfem = _fem; end if;
     
      if (_rupt != _clas) then
         update `test` set clahom = _chom, clafem = _cfem
         where course = _cour and clagen = _clas and sexe = _sex;
      end if;
     
      SET _prec = _cour;
      SET _rupt = _clas;
     
      FETCH _tab INTO _cour, _sex, _clas;
    END WHILE;
     
    CLOSE _tab;
    END $$
    DELIMITER ;
     
    -- ===============
    -- Appel Procédure
    -- ===============
     
    CALL trait();
     
    -- ================
    -- Vidage de `test`
    -- ================
     
    select id,
           prenom,
           course,
           clagen as 'Classement Général',
    	   clahom as 'Classement Hommes',
    	   clafem as 'Classement femmes'
    from test;
     
    -- ===
    -- Fin
    -- ===
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    Ce qui n'apparait pas, c'est ceci :
    au début de la procédure stockée, et cela :
    à la fin de la procédure.

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

  8. #8
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut
    Opus...

    Je ne sais pas si je fait mal mais encore une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1305 - PROCEDURE nombdd.trait does not exist
    Car comme j'ai déjà la base et la table de crée je rentre juste ça dans PhpMyadmin

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
     
     
    select * from test;
     
     
     
    drop procedure `trait`;
     
    delimiter $$ ;
    create procedure `trait` ()
    DETERMINISTIC
    NO SQL
    BEGIN
    DECLARE _rupt  tinyint unsigned DEFAULT 0;
    DECLARE _clas  tinyint unsigned DEFAULT NULL;
     
    DECLARE _prec  CHAR(12)         DEFAULT NULL;
    DECLARE _cour  CHAR(12)         DEFAULT NULL;
     
    DECLARE _sex   CHAR(01)         DEFAULT NULL;
    DECLARE _chom  CHAR(10)         DEFAULT '';
    DECLARE _cfem  CHAR(10)         DEFAULT '';
     
    DECLARE _hom   tinyint unsigned DEFAULT 0;
    DECLARE _fem   tinyint unsigned DEFAULT 0;
     
    DECLARE _fin  INTEGER           DEFAULT 1;
     
    DECLARE _tab  CURSOR FOR SELECT course, sexe, clagen FROM test ORDER BY course, clagen;
     
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
     
     
    OPEN  _tab;
    FETCH _tab INTO _cour, _sex, _clas;
    WHILE (_fin)
    DO
      if (_prec != _cour) then SET _hom = 0;        SET _fem = 0;                       end if;
      if (_sex   =   'H') then SET _hom = _hom + 1; SET _chom = _hom; SET _cfem = '';   end if;
      if (_sex   =   'F') then SET _fem = _fem + 1; SET _chom = '';   SET _cfem = _fem; end if;
     
      if (_rupt != _clas) then
         update `test` set clahom = _chom, clafem = _cfem
         where course = _cour and clagen = _clas and sexe = _sex;
      end if;
     
      SET _prec = _cour;
      SET _rupt = _clas;
     
      FETCH _tab INTO _cour, _sex, _clas;
    END WHILE;
     
    CLOSE _tab;
    END $$
    DELIMITER ;
     
     
     
     
    CALL trait();
     
     
     
    select id,
           prenom,
           course,
           clagen as 'Classement Général',
    	   clahom as 'Classement Hommes',
    	   clafem as 'Classement femmes'
    from test;
     
     
     
    COMMIT;
    SET AUTOCOMMIT = 1;

  9. #9
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Le Néophyte.

    La procédure ne va pas fonctionner telle quelle !
    Il faut d'abord réadapter la procédure à tes tables et tes colonnes.
    Ce que je t'ai donné, c'est juste un exemple de fonctionnement.

    Il faut d'abord sélectionner la base de données pour stocker la procédure.

    Il faut écrire "delimiter $$" sans mettre la virgule comme je l'ai fait.
    Erreur de ma part, mais qui passe très bien en ligne de commande.

    Ensuite, tu mets beaucoup trop de choses dans ce que tu vas introduire sous phpmyadmin.
    Il faut mettre ce qui se trouve entre "delimiter $$ ... delimiter ;" compris !

    Et tu fais cela dans l'onglet 'sql'. Tu cliques sur le bouton exécuter.
    Normalement cela devrait fonctionner correctement.

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

  10. #10
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut Le Néophyte.

    La procédure ne va pas fonctionner telle quelle !
    Il faut d'abord réadapter la procédure à tes tables et tes colonnes.
    Ce que je t'ai donné, c'est juste un exemple de fonctionnement.

    Il faut d'abord sélectionner la base de données pour stocker la procédure.

    Il faut écrire "delimiter $$" sans mettre la virgule comme je l'ai fait.
    Erreur de ma part, mais qui passe très bien en ligne de commande.

    Ensuite, tu mets beaucoup trop de choses dans ce que tu vas introduire sous phpmyadmin.
    Il faut mettre ce qui se trouve entre "delimiter $$ ... delimiter ;" compris !

    Et tu fais cela dans l'onglet 'sql'. Tu cliques sur le bouton exécuter.
    Normalement cela devrait fonctionner correctement.

    @+


    Merci en tout cas pour le temps que tu m'accorde !!

    Donc j'ai déjà renommé mes colonnes comme les tiennes..

    J'entre ça dans l'onglet SQL après avoir choisi la base

    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
    43
    44
    45
    46
    47
    48
    delimiter $$
    create procedure `trait` ()
    DETERMINISTIC
    NO SQL
    BEGIN
    DECLARE _rupt  tinyint unsigned DEFAULT 0;
    DECLARE _clas  tinyint unsigned DEFAULT NULL;
     
    DECLARE _prec  CHAR(12)         DEFAULT NULL;
    DECLARE _cour  CHAR(12)         DEFAULT NULL;
     
    DECLARE _sex   CHAR(01)         DEFAULT NULL;
    DECLARE _chom  CHAR(10)         DEFAULT '';
    DECLARE _cfem  CHAR(10)         DEFAULT '';
     
    DECLARE _hom   tinyint unsigned DEFAULT 0;
    DECLARE _fem   tinyint unsigned DEFAULT 0;
     
    DECLARE _fin  INTEGER           DEFAULT 1;
     
    DECLARE _tab  CURSOR FOR SELECT course, sexe, clagen FROM test ORDER BY course, clagen;
     
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
    -- =========================================================================================================
     
    OPEN  _tab;
    FETCH _tab INTO _cour, _sex, _clas;
    WHILE (_fin)
    DO
      if (_prec != _cour) then SET _hom = 0;        SET _fem = 0;                       end if;
      if (_sex   =   'H') then SET _hom = _hom + 1; SET _chom = _hom; SET _cfem = '';   end if;
      if (_sex   =   'F') then SET _fem = _fem + 1; SET _chom = '';   SET _cfem = _fem; end if;
     
      if (_rupt != _clas) then
         update `test` set clahom = _chom, clafem = _cfem
         where course = _cour and clagen = _clas and sexe = _sex;
      end if;
     
      SET _prec = _cour;
      SET _rupt = _clas;
     
      FETCH _tab INTO _cour, _sex, _clas;
    END WHILE;
     
    CLOSE _tab;
    END $$
    DELIMITER ;
    La ça me donne :

    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
    create procedure `trait` ()
    DETERMINISTIC
    NO SQL
    BEGIN
    DECLARE _rupt tinyint unsigned DEFAULT 0;
    DECLARE _clas tinyint unsigned DEFAULT NULL;
     
    DECLARE _prec CHAR(12) DEFAULT NULL;
    DECLARE _cour CHAR(12) DEFAULT NULL;
     
    DECLARE _sex CHAR(01) DEFAULT NULL;
    DECLARE _chom CHAR(10) DEFAULT '';
    DECLARE _cfem CHAR(10) DEFAULT '';
     
    DECLARE _hom tinyint unsigned DEFAULT 0;
    DECLARE _fem tinyint unsigned DEFAULT 0;
     
    DECLARE _fin INTEGER DEFAULT 1;
     
    DECLARE _tab CURSOR FOR SELECT course, sexe, clagen FROM test ORDER BY course, clagen;
     
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
    -- =========================================================================================================
     
    OPEN _tab;
    FETCH _tab INTO _cour, _sex, _clas;
    WHILE (_fin)
    DO
    if (_prec != _cour) then SET _hom = 0; SET _fem = 0; end if;
    if (_sex = 'H') then SET _hom = _hom + 1; S[...]
    Mais ça ne rempli pas mes colonnes

  11. #11
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut le néophyte.

    Je viens de reprendre le code que tu viens de modifier et cela fonctionne parfaitement chez moi.

    Sous phpmyadmin, il faut d'abord sélectionner la base de données, en cliquant dessus, dans la colonne de gauche.
    Ensuite, tu ouvres l'onglet 'SQL', et tu déposes le code. Tu cliques sur exécuter. Et il te réponds ceci :



    On remarque que la procédure apparait bien dans la colonne de gauche, en dessous du nom 'base'.
    Là, je ne peux plus rien faire pour toi !

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

  12. #12
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut
    Oui j'ai bien la procédure mais en fait je n'ai pas du tout comprendre !! Désolé

    Je dois faire quelque chose ensuite avec cette procédure pour qu'elle remplissent mes champs "clafem" et "clahom" automatiquement ?

    la ils restent avec '-'

  13. #13
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Merci pour les points !

    Citation Envoyé par Le Néophyte
    Je dois faire quelque chose ensuite avec cette procédure pour qu'elle remplissent mes champs "clafem" et "clahom" automatiquement ?
    Et bien regarde l'exemple que j'ai fait. Tu appelles la procédure par ; 'call trait();'.

    N'oublie pas que MySql ne peut pas deviner sur quelle base tu travailles.
    Il faut faire un : 'use base', ou bien préfixer la procédure : 'call base.trait();'.

    Tu peux mettre le sujet à résolu.

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

  14. #14
    Membre régulier Avatar de Le Néophyte
    Homme Profil pro
    Développeur débutant...
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur débutant...

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 82
    Points
    82
    Par défaut
    Bravo !
    Un grand MERCI !!!
    A bientôt !

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Artemus24 Voir le message

    J'attends ta démonstration ! Car j'aurai aimé savoir comment tu fais pour gérer les ruptures de séquences avec le fenêtrage.
    C'est simple il suffit de savoir faire du SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH T AS
    (SELECT *,
            DENSE_RANK() OVER(PARTITION BY Sex ORDER BY  ClassementGeneral) AS ClassementMixte
     FROM   COMPET)
    SELECT Prenom, Course, ClassementGeneral, Sex,
           CASE WHEN Sex = 'H' THEN ClassementMixte END AS ClassementHomme,
           CASE WHEN Sex = 'F' THEN ClassementMixte END AS ClassementFemme
    FROM   T;
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Prenom                    Course                           ClassementGeneral Sex  ClassementHomme      ClassementFemme
    ------------------------- -------------------------------- ----------------- ---- -------------------- --------------------
    Jeanne                    leMans2005                       2                 F    NULL                 1
    Mireille                  leMans2005                       3                 F    NULL                 2
    Sylvie                    Monaco2006                       3                 F    NULL                 2
    corinne                   Monaco2006                       4                 F    NULL                 3
    Bernadette                Monaco2006                       4                 F    NULL                 3
    Elise                     Monaco2006                       6                 F    NULL                 4
    Maurice                   Monaco2006                       1                 H    1                    NULL
    Marc                      leMans2005                       1                 H    1                    NULL
    Christian                 Monaco2006                       2                 H    2                    NULL
    Bruno                     leMans2005                       4                 H    3                    NULL
    L'exemple de solution donné à l'origine est d'ailleurs fausse !

    Ceci fait partie du SQL de la norme depuis la version SQL:1999 que MySQmerde ne supporte toujours pas (ni fonction de fenêtrage ni CTE...)

    Les tables et données en SQL (et pas en MySQmerde)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE COMPET 
    (Prenom 	            VARCHAR(25),
     Course 	            VARCHAR(32),
     ClassementGeneral   INT,
     Sex                 CHAR(1));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO COMPET VALUES
    ('Marc', 'leMans2005', 1, 'H'),
    ('Jeanne', 'leMans2005', 2, 'F'),
    ('Mireille', 'leMans2005', 3, 'F'),
    ('Bruno', 'leMans2005', 4, 'H'),
    ('Maurice', 'Monaco2006', 1, 'H'),
    ('Christian', 'Monaco2006', 2, 'H'),
    ('Sylvie', 'Monaco2006', 3, 'F'),
    ('corinne', 'Monaco2006', 4, 'F'),
    ('Bernadette', 'Monaco2006', 4, 'F'),
    ('Elise', 'Monaco2006', 6, 'F');
    Bref, la prochaine fois optez pour un vrai SGBDR et non un ersatz... A me lire : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux

    Et pour apprendre le SQL :
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 154
Taille : 77,8 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    J'attends ta démonstration ! Car j'aurai aimé savoir comment tu fais pour gérer les ruptures de séquences avec le fenêtrage.
    SQL Pro a dégainé plus vite que moi, la démonstration est donc faite
    Les fonctions RANK et DENSE_RANK sont justement faites pour ça, à utiliser sans modération ... sauf sous MySQL qui ne les connait malheureusement pas

  17. #17
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Merci SqlPro pour ton exemple.

    Citation Envoyé par SQLPRO
    C'est simple il suffit de savoir faire du SQL :
    Je n'aurai pas dit cela ainsi, mais plutôt de posséder sur son ordinateur le bon SGBD qui permet de le faire !
    Comme je n'ai pas installé "Microsoft sql server", je ne peux pas le tester. Dommage.

    Pour MySql, la seule solution est de faire une procédure stockée. Est-ce bien cela ?

    Citation Envoyé par SQLPRO
    L'exemple de solution donné à l'origine est d'ailleurs fausse !
    Je ne comprends pas, de quelle exemple parles-tu ?

    A part MySql, le seul autre SGBD installé sur mon ordinateur est FireBird.

    Bon, j'ai essayé cet après-midi de reprendre cet exemple mais en l'adaptant à FireBird.
    Je ne suis pas arrivé à résoudre la rupture de séquence.
    J'ai ouvert un autre sujet dans le forum FireBird : http://www.developpez.net/forums/d15...urs-sequences/
    J'espère avoir quelques explications sur cette faisabilité.

    Citation Envoyé par SQLPRO
    Bref, la prochaine fois optez pour un vrai SGBDR et non un ersatz...
    Je voudrais savoir s'il est possible d'installer une version gratuite mais permanente de 'Microsoft Sql Server' ?
    Et qu'est-ce qui la différencie de la version complète mais payante ?

    Citation Envoyé par Escartefigue
    Les fonctions RANK et DENSE_RANK sont justement faites pour ça, à utiliser sans modération ... sauf sous MySQL qui ne les connait malheureusement pas
    C'est même pire, on n'a pas la possibilité de créer sous MySql des "generator" ou des "sequence" comme sous FireBird.
    Il y a vraiment des manques sous MySql. C'est pourtant très utile d'associer cela à une base de données.

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

  18. #18
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Je ne comprends pas, de quelle exemple parles-tu ?
    Non ! Tu peut simuler les fonctions de fenêtrage. Lis l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/article...clause-window/
    Il y a aussi d'autres exemple dans mon livre sur SQL dont je t'ai proposé de t'envoyer un exemplaire gratuit et que tu a refusé !!!
    Enfin, mon collègue et ami Stéphane Faroult à publié quelques unes des équivalences logiques des principales fonctions de fenêtrage lorsque l'on en dispose pas : http://www.amazon.fr/gp/product/1909765007
    Nom : StephaneFaroultSQLSuccess.jpg
Affichages : 151
Taille : 42,8 Ko
    Reste que sans c'est catastrophique pour les performances !

    A part MySql, le seul autre SGBD installé sur mon ordinateur est FireBird.

    Lui aussi est très limité !

    Bon, j'ai essayé cet après-midi de reprendre cet exemple mais en l'adaptant à FireBird.
    Je ne suis pas arrivé à résoudre la rupture de séquence.
    J'ai ouvert un autre sujet dans le forum FireBird : http://www.developpez.net/forums/d15...urs-sequences/
    J'espère avoir quelques explications sur cette faisabilité.

    Je voudrais savoir s'il est possible d'installer une version gratuite mais permanente de 'Microsoft Sql Server' ?
    Et qu'est-ce qui la différencie de la version complète mais payante ?
    La version gratuite est la version Express 2014 qui existe en différentes déclinaisons :
    • SQL Server Express with Tools (la plus classique pour faire que du relationnel comprend aussi l'outil client SQL Server Management Studio)
    • SQL Server Management Studio (l'outil gratuit pour piloter tes instances SQL Server
    • SQL Server Express LocalDB (programme d'installation MSI) la version embarquée de SQL Server)
    • SQL Server Express with Advanced Services (la plus complète)
    • SQL Server Express (le moteur

    https://www.microsoft.com/fr-fr/serv...r-express.aspx

    Sa limitation est de 10 Go par base et 1 Go de RAM max dédié à SQL Server.
    Tu peut néanmoins créer jusqu'à 32 760 bases, soit 328 To de données par instances et tu peut y mettre 10 instance sur un OS Windows Desktop et 50 sur un OS Windows Server
    Et il est multi schéma...

    Sinon, tu peut essayer ad vitam æternam la version 2016 complète (enterprise) de SQL Server (CTP 3.2) :
    https://technet.microsoft.com/fr-fr/.../mt130694.aspx
    Ce n'est pas la version définitive qui bien entendu sera payante mais c'est une version béta 3.2 qui contient déjà l'essentiel de ce que sera la version 2016 qui doit sortir dans quelques mois. Certains de mes clients l'utilisent déjà en production....
    Ses limites sont les suivantes :
    • Nombre de cœurs/CPU : pas de limite (limite effective de l'OS)
    • Quantité de RAM : pas de limite (limite effective de l'OS)
    • Taille maximale d'une base : 524 Po
    • Nombre maximale de bases par instance : 32760
    • Nombre maximale d'instances : 50
    • Volume maximal de données sur un serveur : 858 312 000 Po
    • Nombre maximal d'utilisateur par instance : 32000



    C'est même pire, on n'a pas la possibilité de créer sous MySql des "generator" ou des "sequence" comme sous FireBird.
    Il y a vraiment des manques sous MySql. C'est pourtant très utile d'associer cela à une base de données.

    @+
    MySQL est le pire des pseudo SGBD il n'est même pas clairement relationnel. Lire les règles de Codd et les exemples que j'ai donné. MySQL se plante lors de la mise à jour des clefs...
    http://sqlpro.developpez.com/SGBDR/ReglesCodd/

    Critique de MySQL à lire : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux

    Et en plus il n'est même pas rapide du fait de ses manques (CTE, fonction de fenêtrage, opérateur APPLY...) : http://blog.developpez.com/sqlpro/p9...alles_en_sql_1

    Et personnellement pour l'avoir vu souvent en entreprise il n'est pas fiable, totalement instable et son mode de sauvegarde le rend inexploitable de manière pro à tel point que certaines entreprises ne font même plus de sauvegardes !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  19. #19
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut SqlPro.

    Citation Envoyé par SqlPro
    Sinon, tu peux essayer ad vitam æternam la version 2016 complète (enterprise) de SQL Server (CTP 3.2) :
    Merci pour tes explications. Je pense que je vais prendre la version 2016 complète, même si elle est beta.
    J'ai besoin d'une version complète, juste pour faire de la manipulation, et continuer à apprendre.

    Avant de l'installer, de quelle volumétrie sur mon disque dur ai-je besoin ?

    Citation Envoyé par SqlPro
    MySQL est le pire des pseudo SGBD il n'est même pas clairement relationnel.
    Peut-être qu'à ton niveau d'expert, la perfection se nomme "Microsoft Sql Server". Mais pour d'autres, MySql est largement suffisant.
    Quand j'ai débuté en DB2 dans les années 80, ce SGBD n'était pas aussi perfectionné que MySql aujourd'hui. Alors tu sais, tout est relatif.

    Les fonctions de fenêtrage sont très puissants. Cela peut devenir très complexe, selon tes exemples (Exemple 11 entre autre).
    Je ne sais pas si dans la réalité, tout le monde arrive à maîtriser un tel niveau de complexité. Mais l'important reste la performance.

    Je ne sais pas si tu as jeté un coup d’œil au lien que j'ai donné, j'ai pu, sous FirdBird 3.0.0, testé la requête de fenêtrage.
    C'est plus concis à mettre en oeuvre que la procédure stockée sous MySql.

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

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/11/2007, 22h15
  2. Insérer SQL par JCL
    Par Antichoc dans le forum DB2
    Réponses: 2
    Dernier message: 02/09/2007, 19h22
  3. compter des valeurs par familles
    Par jacques64 dans le forum Excel
    Réponses: 7
    Dernier message: 14/06/2007, 17h04
  4. Insérer caractère par son code ASCII
    Par Ange44 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 10/04/2007, 12h04
  5. regrouper par famille pere-fils
    Par frandis dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/02/2007, 10h46

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