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

PHP & Base de données Discussion :

Selectionner des champs en groupant par 2 categories [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Selectionner des champs en groupant par 2 categories
    Bonjour,

    J'ai une table de chansons, je voudrais trier pour chaque chanteurs les types de chansons (Rock, Blues,..) ainsi que si cette chanson etait en single ou bien avec un groupe, voila la structure de ma table:

    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
     
    CREATE TABLE IF NOT EXISTS `chansons` (
      `id` int(5) NOT NULL auto_increment,
      `idc` int(2) NOT NULL,
      `type_chanson` varchar(100) collate latin1_general_ci NOT NULL,
      `sin_gr` varchar(100) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=11 ;
     
    --
    -- Contenu de la table `chansons`
    --
     
    INSERT INTO `chansons` (`id`, `idc`, `type_chanson`, `sin_gr`) VALUES
    (1, 1, 'Blues', 'Single'),
    (2, 1, 'Blues', 'Groupe'),
    (3, 1, 'Blues', 'Single'),
    (4, 1, 'Blues', 'Single'),
    (5, 1, 'Blues', 'Single'),
    (6, 1, 'Blues', 'Groupe'),
    (7, 1, 'Rock', 'Single'),
    (8, 1, 'Rock', 'Groupe'),
    (9, 1, 'Rock', 'Groupe'),
    (10, 1, 'Rock', 'Groupe');
    Je voudrais avoir un resultat comme suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1- Blues Single
    2- Blues Groupe
    3- Rock Single
    4- Rock Groupe
    En utilisant cette requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *
    FROM `chansons` WHERE idc =1 GROUP BY type_chanson
    ou bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *
    FROM `chansons` WHERE idc =1 GROUP BY sin_gr
    ca neglige les autres resultats.

    Merci

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    il faut que tu groupes selon 2 champs :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM chansons
    WHERE idc =1 
    GROUP BY type_chanson, sin_gr

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    Bonjour,

    il faut que tu groupes selon 2 champs :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM chansons
    WHERE idc =1 
    GROUP BY type_chanson, sin_gr
    Merci Madfrix, j'ai groupe avec les 2 champs en utilisant AND au lieu de ",", merci pour la correction.

    Citation Envoyé par sabotage
    Bonjour,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT(type_chanson, sin_gr)
    FROM `chansons` WHERE idc =1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1241 - Operand should contain 1 column(s)

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    tu n'as pas besoin de mettre des parenthèses avec un distinct

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    tu n'as pas besoin de mettre des parenthèses avec un distinct
    Merci, ca marche

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT(type_chanson, sin_gr)
    FROM `chansons` WHERE idc =1
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    le distinct me semble toujours un plus lent. Je sais pas si c'est toujours le cas mais dans une table perso de 100k lignes ma requête met 10X plus de temps avec le distinct qu'avec le group by.

    Quelqu'un a déjà remarqué cela ?

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

Discussions similaires

  1. [MySQL] Selectionner des champs spécifiques de 2 tables comportant les meme noms
    Par monlou dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/09/2010, 17h29
  2. [AC-2007] selectionner des champs dans un sous-formulaire
    Par karwafmhz dans le forum IHM
    Réponses: 2
    Dernier message: 08/06/2010, 19h49
  3. mettre la valeur des champs a vide par default
    Par skillipo dans le forum Hibernate
    Réponses: 3
    Dernier message: 30/04/2008, 08h58
  4. Réponses: 2
    Dernier message: 21/04/2006, 12h09
  5. [débutant] Ordre des champs de saisie par la touche tab
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 03/03/2005, 19h45

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