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 :

Récupérer des enregistrements dans DB MySql


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Architecte
    Inscrit en
    Septembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Septembre 2018
    Messages : 9
    Par défaut Récupérer des enregistrements dans DB MySql
    Bonjour à tous,

    J'ai cherché et encore cherché...c'est sans doute un problème tout con, mais je cale...

    Je simplifie un rien pour ma question

    J'ai une table au sein de ma DB avec les colonnes et les données suivantes :

    ID--- JOUR --- MOIS --- ANNEE --- PHASE ---- CHECK
    9-------03-------10--------2018--------5------------1
    8-------15-------09--------2018--------5------------0
    7-------14-------09--------2018--------5------------0
    6-------13-------09--------2018--------5------------1
    5-------12-------09--------2018--------5------------0
    4-------11-------09--------2018--------5------------0
    3-------05-------05--------2017--------4------------1
    2-------04-------03--------2017--------4------------0
    1-------21-------11--------2016--------3------------1

    J'aimerai pouvoir afficher une liste triée par année, puis par mois, qui donnerait ceci :

    2018
    mois 10
    ID 9 - car cet enregistrement est en CHECK = 1
    mois 09
    ID 6 - car cet enregistrement est en CHECK = 1
    ID 4 - car c'est la première fois que la phase "5" apparaît en 2018

    2017
    mois 05
    ID 3 - car cet enregistrement est en CHECK = 1
    mois 03
    ID 2 - car c'est la première fois que la phase "4" apparaît en 2017

    2016
    mois 11
    ID 1 - car c'est la première fois que la phase "3" apparaît en 2016
    petite subtilité, et je l'ai fait exprès, Il faut que l'ID 1 n’apparaisse q'une fois dans la liste malgré que ce soit la première fois que la phase "3" apparaît en 2016 ET qu'il est aussi en CHECK = 1

    Voilà, j'espère avoir été clair, même si mon pauvre cerveau est assez embrumé pour l'instant !

    Déjà un GRAND merci à vous !

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 631
    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 631
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Quelle est votre version mySQL ?

    Depuis la V8, la prise en compte ENFIN des fonctions fenêtrées (qui existent depuis au moins 10 ans dans les autres SGBD mais c'est une parenthèse) facilitent grandement les notions de rang

  3. #3
    Membre régulier
    Homme Profil pro
    Architecte
    Inscrit en
    Septembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Septembre 2018
    Messages : 9
    Par défaut
    Hébergement chez Infomaniak.ch
    La version annoncée sur leur site est la MySQL 5.5/5.6

    Merci !

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    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 913
    Par défaut
    Salut à tous.

    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
    --------------
    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`      integer  unsigned  NOT NULL auto_increment PRIMARY KEY,
      `jour`    tinyint  unsigned  NOT NULL,
      `mois`    tinyint  unsigned  NOT NULL,
      `annee`   smallint unsigned  NOT NULL,
      `phase`   tinyint  unsigned  NOT NULL,
      `check`   boolean            NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`jour`,`mois`,`annee`,`phase`,`check`) values
      (21, 11, 2016, 3, true),
      (04, 03, 2017, 4, false),
      (05, 05, 2017, 4, true),
      (11, 09, 2018, 5, false),
      (12, 09, 2018, 5, false),
      (13, 09, 2018, 5, true),
      (14, 09, 2018, 5, false),
      (15, 09, 2018, 5, false),
      (03, 10, 2018, 5, true)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------+------+-------+-------+-------+
    | id | jour | mois | annee | phase | check |
    +----+------+------+-------+-------+-------+
    |  1 |   21 |   11 |  2016 |     3 |     1 |
    |  2 |    4 |    3 |  2017 |     4 |     0 |
    |  3 |    5 |    5 |  2017 |     4 |     1 |
    |  4 |   11 |    9 |  2018 |     5 |     0 |
    |  5 |   12 |    9 |  2018 |     5 |     0 |
    |  6 |   13 |    9 |  2018 |     5 |     1 |
    |  7 |   14 |    9 |  2018 |     5 |     0 |
    |  8 |   15 |    9 |  2018 |     5 |     0 |
    |  9 |    3 |   10 |  2018 |     5 |     1 |
    +----+------+------+-------+-------+-------+
    --------------
    select    t1.`annee`,
              t1.`mois`,
              t1.`id`,
              t1.`phase`,
              t1.`check`
     
        from  `test` as t1
     
       where  `check` is true
          or  t1.`id` = (  select  min(t2.`id`)
                             from  `test` as t2
                            where  t2.`annee` = t1.`annee`
                              and  t2.`phase` = t1.`phase`
                        )
     
    order by  `annee` desc, `mois` desc, `id` desc
    --------------
     
    +-------+------+----+-------+-------+
    | annee | mois | id | phase | check |
    +-------+------+----+-------+-------+
    |  2018 |   10 |  9 |     5 |     1 |
    |  2018 |    9 |  6 |     5 |     1 |
    |  2018 |    9 |  4 |     5 |     0 |
    |  2017 |    5 |  3 |     4 |     1 |
    |  2017 |    3 |  2 |     4 |     0 |
    |  2016 |   11 |  1 |     3 |     1 |
    +-------+------+----+-------+-------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

  5. #5
    Membre régulier
    Homme Profil pro
    Architecte
    Inscrit en
    Septembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Septembre 2018
    Messages : 9
    Par défaut
    Bonjour Artemus,

    Désolé pour réponse tardive, je rentre de l'étranger.

    Merci pour la requête "imbriquée", ça fonctionne nickel , effectivement !

    Toutefois, dernier "petit" souci, c'est qu'à la sortie, il ne me regroupe pas par année puis par mois... Dans ton tableau tu obtiens ceci :

    | annee | mois | id | phase | check |
    +-------+------+----+-------+-------+
    | 2018 | 10 | 9 | 5 | 1 |
    | 2018 | 9 | 6 | 5 | 1 |
    | 2018 | 9 | 4 | 5 | 0 |
    | 2017 | 5 | 3 | 4 | 1 |
    | 2017 | 3 | 2 | 4 | 0 |
    | 2016 | 11 | 1 | 3 | 1 |

    Le top aurait été d'obtenir :

    | annee | mois | id | phase | check |
    +-------+------+----+-------+-------+
    | 2018 | 10 | 9 | 5 | 1 |
    ////////// 9 | 6 | 5 | 1 |
    //////////////// 4 | 5 | 0 |
    | 2017 | 5 | 3 | 4 | 1 |
    ////////// 3 | 2 | 4 | 0 |
    | 2016 | 11 | 1 | 3 | 1 |

    Je t'avoue que malgré mes essais avec un "GROUP BY", cela ne fonctionne pas comme prévu

    Une dernière idée ?

    Déjà un grand merci !

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    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 913
    Par défaut
    Salut Sodakin.

    Citation Envoyé par Sodakin
    Désolé pour réponse tardive, je rentre de l'étranger.
    De mon point de vue, vous êtes déjà à l'étranger. Alors vous rentrez quand ?

    Citation Envoyé par Sodakin
    Toutefois, dernier "petit" souci, c'est qu'à la sortie, il ne me regroupe pas par année puis par mois...
    Si votre problème est une question de présentation, vous devez traiter cela par php.
    Par contre, si vous n'avez plus les année et les mois, comment allez-vous gérer vos ruptures de séquences ?

    Citation Envoyé par Sodakin
    Je t'avoue que malgré mes essais avec un "GROUP BY", cela ne fonctionne pas comme prévu
    C'est normal car mysql n'est pas destiné à faire de la présentation.

    @+

Discussions similaires

  1. Enregistrer des enregistrements dans une BD MySQL
    Par marguerite99 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 04/10/2010, 12h11
  2. [MySQL] S'assurer du bon enregistrement des données dans BDD mysql
    Par lilly91 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/12/2009, 14h14
  3. [MySQL] inserer des enregistrements dans un table mysql
    Par ksour dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/08/2009, 14h51
  4. Réponses: 2
    Dernier message: 09/11/2006, 07h37
  5. []Problème d'affichage des enregistrements dans un DataReport
    Par GeniuZ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 05/01/2005, 16h52

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