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 :

Selon les critères, afficher un de chaque enregistrement d'un doublon relatif [MySQL-5.6]


Sujet :

MySQL

  1. #1
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut Selon les critères, afficher un de chaque enregistrement d'un doublon relatif
    Bonjour,

    voici ma table mySql :
    id . . . | . . . date . . ....... | . . . nom ... | possesseur | . . . console | . . . prix . . . | nbre_joueurs_max | commentaires | product_id


    1 . . . | . . . 2016-01-22 . | Toto . . . | . . . i7 . . . | . . . mobile . . . | . . . 4.00 . . . | . . . 5 . .. . . | . NULL . . . | 125
    2 . . . | . . . 2016-01-22 . | Super ... | . . . i5 . . . | . . . desk . . . ..| . . . 5.00 . . . | . . . 3. .. . . | . NULL . . . | 125D0
    3 . . . | . . . 2016-01-22 . | Titi . . ... | . . . i7 . . . | . . . laptop . . . | . . . 14.00 . . | . . 15. .. . . | . NULL . . . | 125LPT12
    4 . . . | . . . 2016-01-22 . | Toto . . . | . . . i7 . . . | . . . mobile . . . | . . . 4.00 . . . | . . . 5. .. . . | . NULL . . . | 125
    5 . . . | . . . 2016-01-21 . | Gogo . . | . . . AMD12 . . . | . . . mobile . . . | . . . 1.00 . . . | . . . 1. .. . . | . NULL . . . | 128
    6 . . . | . . . 2016-01-20 . | John . . . | . . . i5 . . . | . . . mobile . . . | . . . 4.50 . . . | . . . 2. .. . . | . NULL . . . | 108
    7 . . . | . . . 2016-01-18 . | Toto . . . | . . . i7 . . . | . . . mobile . . . | . . . 4.00 . . . | . . . 5. .. . . | . NULL . . . | 125

    en fait, je trouve les doublons avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT *
    FROM   jeux_video_doublon_relatifif T1
    WHERE  EXISTS (SELECT *
    		FROM   jeux_video_doublon_relatifif T2
    		WHERE  T1.ID <> T2.ID
    			AND  T1.date = T2.date
    			AND  T1.nom    = T2.nom
    			AND  T1.product_id = T2.product_id)
    J'aimerais bien sélectionner tous les colons et tous les enregistrements et un enregistrement de chaque doublon.
    Dans mon cas, id 1 et 4 sont doublons.

    Donc j'aimerais bien obtenir :

    Soit les id suivants :

    1
    2
    3
    5
    6
    7

    soit
    2
    3
    4
    5
    6
    7

    Donc, soit

    1 | 2016-01-22| Toto | i7 | mobile | 4.00 | 5 | NULL | 125
    2 | 2016-01-22| Super | i5 | desk | 5.00 | 3 | NULL | 125D0
    3 | 2016-01-22| Titi | i7 | laptop | 14.00 | 15 | NULL | 125LPT12
    5 | 2016-01-21| Gogo | AMD12 | mobile | 1.00 | 1 | NULL | 128
    6 | 2016-01-20| John | i5 | mobile | 4.50 | 2 | NULL | 108
    7 | 2016-01-18| Toto | i7 | mobile | 4.00 | 5 | NULL | 125

    soit
    2 | 2016-01-22| Super | i5 | desk | 5.00 | 3 | NULL | 125D0
    3 | 2016-01-22| Titi | i7 | laptop | 14.00 | 15 | NULL | 125LPT12
    4 | 2016-01-22| Toto | i7 | mobile | 4.00 | 5 | NULL | 125
    5 | 2016-01-21| Gogo | AMD12 | mobile | 1.00 | 1 | NULL | 128
    6 | 2016-01-20| John | i5 | mobile | 4.50 | 2 | NULL | 108
    7 | 2016-01-18| Toto | i7 | mobile | 4.00 | 5 | NULL | 125

    Comment puis-je le faire ?

    Un grand merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Je suis un peu perdu... Je me suis dit d'utiliser quelques choses simples : "SELECT DISTINCT " au cas où je suis un peu...

    Je fais "SELECT DISTINCT " me je ne l’obtiens pas ce que je veux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT 
    `ID`, `date`, `nom`, `possesseur`, `console`, `prix`, `nbre_joueurs_max`, `commentaires`, `product_id`
    FROM `jeux_video_doublon_relatifif` ORDER BY `ID` ASC
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT *
    FROM `jeux_video_doublon_relatifif` ORDER BY `ID` ASC
    est ce que vous pouvez m'aider ?

    merci

  3. #3
    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 898
    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 898
    Par défaut
    Salut tonton.odilon.

    Tu demandes de regrouper tous les doublons en une seule ligne.
    Pour ce faire, il faut utiliser le 'group by'.

    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
    --------------
    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 IF NOT EXISTS `test`
    ( `id`                 integer unsigned NOT NULL,
      `date`               date             NOT NULL,
      `nom`                char(10)         NOT NULL,
      `possesseur`         char(10)         NOT NULL,
      `console`            char(10)         NOT NULL,
      `prix`               decimal(10,2)    NOT NULL,
      `nbre_joueurs_max`   smallint         NOT NULL,
      `commentaires`       varchar(255)         NULL,
      `product_id`         char(10)         NOT NULL,
      Primary Key (`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`id`,`date`,`nom`,`possesseur`,`console`,`prix`,`nbre_joueurs_max`,`commentaires`,`product_id`) values
    (1, '2016-01-22', 'Toto',  'i7',    'mobile',  4.00,  5, NULL, '125'),
    (2, '2016-01-22', 'Super', 'i5',    'desk',    5.00,  3, NULL, '125D0'),
    (3, '2016-01-22', 'Titi',  'i7',    'laptop', 14.00, 15, NULL, '125LPT12'),
    (4, '2016-01-22', 'Toto',  'i7',    'mobile',  4.00,  5, NULL, '125'),
    (5, '2016-01-21', 'Gogo',  'AMD12', 'mobile',  1.00,  1, NULL, '128'),
    (6, '2016-01-20', 'John',  'i5',    'mobile',  4.50,  2, NULL, '108'),
    (7, '2016-01-18', 'Toto',  'i7',    'mobile',  4.00,  5, NULL, '125')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+------------+-------+------------+---------+-------+------------------+--------------+------------+
    | id | date       | nom   | possesseur | console | prix  | nbre_joueurs_max | commentaires | product_id |
    +----+------------+-------+------------+---------+-------+------------------+--------------+------------+
    |  1 | 2016-01-22 | Toto  | i7         | mobile  |  4.00 |                5 | NULL         | 125        |
    |  2 | 2016-01-22 | Super | i5         | desk    |  5.00 |                3 | NULL         | 125D0      |
    |  3 | 2016-01-22 | Titi  | i7         | laptop  | 14.00 |               15 | NULL         | 125LPT12   |
    |  4 | 2016-01-22 | Toto  | i7         | mobile  |  4.00 |                5 | NULL         | 125        |
    |  5 | 2016-01-21 | Gogo  | AMD12      | mobile  |  1.00 |                1 | NULL         | 128        |
    |  6 | 2016-01-20 | John  | i5         | mobile  |  4.50 |                2 | NULL         | 108        |
    |  7 | 2016-01-18 | Toto  | i7         | mobile  |  4.00 |                5 | NULL         | 125        |
    +----+------------+-------+------------+---------+-------+------------------+--------------+------------+
    --------------
    select *, count(*) as nbre
    from  test
    group by date, nom, product_id
    order by id
    --------------
     
    +----+------------+-------+------------+---------+-------+------------------+--------------+------------+------+
    | id | date       | nom   | possesseur | console | prix  | nbre_joueurs_max | commentaires | product_id | nbre |
    +----+------------+-------+------------+---------+-------+------------------+--------------+------------+------+
    |  1 | 2016-01-22 | Toto  | i7         | mobile  |  4.00 |                5 | NULL         | 125        |    2 |
    |  2 | 2016-01-22 | Super | i5         | desk    |  5.00 |                3 | NULL         | 125D0      |    1 |
    |  3 | 2016-01-22 | Titi  | i7         | laptop  | 14.00 |               15 | NULL         | 125LPT12   |    1 |
    |  5 | 2016-01-21 | Gogo  | AMD12      | mobile  |  1.00 |                1 | NULL         | 128        |    1 |
    |  6 | 2016-01-20 | John  | i5         | mobile  |  4.50 |                2 | NULL         | 108        |    1 |
    |  7 | 2016-01-18 | Toto  | i7         | mobile  |  4.00 |                5 | NULL         | 125        |    1 |
    +----+------------+-------+------------+---------+-------+------------------+--------------+------------+------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+

  4. #4
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour Artemus24,

    Excellent, ça marche...

    Comme je pensais... que mon raisonnement n'était pas simple, trop compliqué...

    Je vois que ta solution est simple et marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *, COUNT(*) AS nbre 
    FROM `jeux_video_doublon_relatifif` 
    GROUP BY date DESC, nom DESC, product_id DESC
    ORDER BY `ID`
    Un grand merci et bon week-end

  5. #5
    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 898
    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 898
    Par défaut
    Salut tonton.odilon.

    J'ai laissé dans mon exemple le tri descendant ('desc') qui n'a aucun influence sur le résultat final. J'ai corrigé mon exemple.

    Il n'est pas nécessaire dans ton exemple de mettre 'count(*)'.
    C'est juste pour montrer qu'en faisant le regroupement, sur la ligne 'id = 1', tu as deux doublons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM `jeux_video_doublon_relatifif` 
    GROUP BY date, nom, product_id
    ORDER BY id;
    @+

  6. #6
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour Artemus24,

    Merci les explications, super cool

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

Discussions similaires

  1. Affichage d'une table selon les critères d'une autre
    Par trifly dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/05/2011, 09h24
  2. Réponses: 18
    Dernier message: 09/12/2010, 20h40
  3. Réponses: 8
    Dernier message: 28/09/2009, 17h32
  4. Requête selon les critères envoyés
    Par Earl7 dans le forum Langage
    Réponses: 32
    Dernier message: 05/06/2008, 15h17
  5. [Requete action]selon les critères de 2 champs, en modifié 1
    Par Nicko29 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/11/2005, 16h53

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