Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2010, 11h04   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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 :
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 :
1
2
3
4
5
 
1- Blues Single
2- Blues Groupe
3- Rock Single
4- Rock Groupe
En utilisant cette requete:

Code :
1
2
3
 
SELECT *
FROM `chansons` WHERE idc =1 GROUP BY type_chanson
ou bien:

Code :
1
2
3
 
SELECT *
FROM `chansons` WHERE idc =1 GROUP BY sin_gr
ca neglige les autres resultats.

Merci
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h10   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

il faut que tu groupes selon 2 champs :

Code sql :
1
2
3
4
 
SELECT * FROM chansons
WHERE idc =1 
GROUP BY type_chanson, sin_gr
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h11   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code :
1
2
SELECT DISTINCT(type_chanson, sin_gr)
FROM `chansons` WHERE idc =1
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h20   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
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 ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h20   #5
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par Madfrix Voir le message
Bonjour,

il faut que tu groupes selon 2 champs :

Code sql :
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 :
1
2
3
 
SELECT DISTINCT(type_chanson, sin_gr)
FROM `chansons` WHERE idc =1
Code :
1
2
 
#1241 - Operand should contain 1 column(s)
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h22   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
tu n'as pas besoin de mettre des parenthèses avec un distinct
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h39   #7
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par Madfrix Voir le message
tu n'as pas besoin de mettre des parenthèses avec un distinct
Merci, ca marche
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h15.


 
 
 
 
Partenaires

Hébergement Web