Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 04/01/2011, 11h01   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Par défaut Remplir une table à partir d'une requête

Bonjour,
J'ai une table "deputes" qui renferme tout pour le moment et des doublons... Ca marche mais ce n'est pas bon comme conception.
Pour le moment voici sa structure :
Code :
1
2
3
4
5
6
7
 
CREATE TABLE IF NOT EXISTS `deputes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `noms` varchar(255) NOT NULL,
  `legislature` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Pour le moment elle est liée à la table "legislatures" :
Code :
1
2
3
4
5
6
7
 
CREATE TABLE IF NOT EXISTS `lagislatures` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `annee_debut` date NOT NULL,
  `annee_fin` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Cette requête me permet de lister tous les députés, le nombre de législatures et la liste des législatures effectuées par chacun :
Code :
1
2
3
4
5
6
 
SELECT noms, COUNT(lagislature) AS nbre_legislatures, 
       GROUP_CONCAT(CAST(lagislature AS CHAR) ORDER BY lagislature SEPARATOR ", " ) AS liste 
			 FROM deputes 
			 GROUP BY noms 
			 ORDER BY nbre_legislatures DESC
Pour le moment tout est okay, mais on retrouve des noms de députés qui reviennent toujours en fonction du nombre de législatures effectuées.

Maintenant je souhaite faire une vraie bdd. Et pour le cas, cela me revient à 3 tables.

1. table deputes
Code :
1
2
3
4
5
 
CREATE TABLE `assnat`.`deputes` (
`id_depute` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`noms` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB;
2. table legislatures
Code :
1
2
3
4
5
6
 
CREATE TABLE `assnat`.`legislatures` (
`id_legis` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date_debut` DATE NOT NULL ,
`date_fin` DATE NOT NULL
) ENGINE = InnoDB;
3. table depute_legislatures
Code :
1
2
3
4
5
 
CREATE TABLE `assnat`.`depute_legislatures` (
`id_depute` INT NOT NULL ,
`id_legis` INT NOT NULL
) ENGINE = InnoDB;
Je souhaite donc savoir comment remplir dynamiquement à partir d'une requête sur la table initial les tables deputes et depute_legislatures de la seconde structure.

NB. Volontairement j'ai laissé de coté les contraintes pour ne pas saturer la problématique.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 11h44   #2
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Le problème a été posé ci haut, mais pour être plus simple, est-ce on peut imbriquer un INSERT INTO dans un SELECT de cette manière :
Code :
1
2
3
4
 
SELECT noms FROM deputes1 ORDER BY noms 
// et pour chaque ligne de résultat de SELECT faire
INSERT INTO deputes2 (id, noms2) VALUES ('', deputes.noms)
Je ne sais pas si j'ai été claire?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 11h51   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Commencez par inserer dans la table deputs la liste des députés :

Code sql :
1
2
3
4
 
INSERT INTO assnat.deputes(noms)
SELECT DISTINCT noms 
FROM deputes

Ensuite, faites de meme pour la table legislature

enfin, pour peupler la table depute_legislatures :
Code sql :
1
2
3
4
 
INSERT INTO assnat.depute_legislatures (id_depute, id_legis)
SELECT id, legislature
FROM deputes

ces requêtes doivent être lancées sur l'ancienne instance

je vous conseille de vérifier avant ca que vous n'avez pas de députés écrit de deux façons différentes pour le même député, auquel cas vous aurez deux lignes dans la table finale deputes pour un seul et même deputé. ( à vérifier également pour la table legislature, mais c'est moins probable !)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h00   #4
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Citation:
Envoyé par aieeeuuuuu Voir le message
...
Exactement exact. Merci

Mais comment refaire cette requête sur la nouvelle base :
Code :
1
2
3
4
5
6
 
SELECT noms, COUNT(lagislature) AS nbre_legislatures, 
       GROUP_CONCAT(CAST(lagislature AS CHAR) ORDER BY lagislature SEPARATOR ", " ) AS liste 
			 FROM deputes 
			 GROUP BY noms 
			 ORDER BY nbre_legislatures DESC
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h37   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Code :
1
2
3
4
5
6
7
SELECT d.noms, 
    COUNT(*) AS nbre_legislatures,
    GROUP_CONCAT(CAST(id_legis AS CHAR) ORDER BY id_legis SEPARATOR ',') AS liste
FROM deputes AS d
INNER JOIN depute_legislatures AS dl ON dl.id_depute = d.id_depute
GROUP BY d.noms
ORDER BY COUNT(*)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 15h27   #6
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Code :
1
2
3
4
5
6
7
SELECT d.noms, 
    COUNT(*) AS nbre_legislatures,
    GROUP_CONCAT(CAST(id_legis AS CHAR) ORDER BY id_legis SEPARATOR ',') AS liste
FROM deputes AS d
INNER JOIN depute_legislatures AS dl ON dl.id_depute = d.id_depute
GROUP BY d.noms
ORDER BY COUNT(*)
Merci, mais c'est pas encore le résultat attendu j'ai ceci pour cette requete
Citation:
noms : Jean paul, nbre_legislatures : 1, liste : 8
Pourtant je m'attendais à ceci :
Citation:
noms : Jean paul , nbre_legislatures : 7, liste: 1, 2, 3, 5, 6, 7, 8
Vous remarquez ce n'est pas bon.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 16h36   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Ne connaissant pas le contenu de la table, je ne peux pas dire si le résultat est juste ou pas mais en tout cas il est cohérent :
MySQL a compté une législature pour Jean Paul et il a donné son numéro : 8.

Pour vérifier, fais cette requête :
Code :
1
2
3
4
5
6
7
8
SELECT COUNT(*)
FROM depute_legislatures
WHERE id_depute =
(
    SELECT id_depute
    FROM deputes
    WHERE noms = 'Jean Paul'
)
Ou encore celle-ci qui devrait donner le même résultat et qui est plus jolie :
Code :
1
2
3
4
SELECT COUNT(*)
FROM depute_legislatures AS dl
INNER JOIN deputes AS d ON d.id_depute = dl.id_depute
WHERE d.noms = 'Jean Paul'
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 17h05   #8
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
une piste, mais vu l'origine des données, c'est a vérifier (en fait c'est ce dont je parle dans mon premier post) :

Code :
1
2
 
'Jean Paul' != 'Jean-Paul'
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 11h29   #9
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Effectivement le problème vient des données de la table depute_legislatures qui a été mal remplie par la requete suivante :
Code :
1
2
3
4
 
INSERT INTO assnat.depute_legislatures (id_depute, id_legis)
SELECT id, legislature
FROM deputes
Je coince toujours à ce niveau.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 12h36   #10
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
arff, oui !

Je suis allé un peu vite
Les ID sont ceux de l'ancienne base, il faut donc chercher les correspondances.
Code sql :
1
2
3
4
5
6
7
8
9
10
11
 
INSERT INTO assnat.depute_legislatures (id_depute, id_legis)
SELECT newdeputes.id, newlegislatures.id
FROM deputes
INNER JOIN legislature 
    ON legislature.id = deputes.id
INNER JOIN assnat.deputes newdeputes 
    ON deputes.nom = newdeputes.nom
INNER JOIN assnat.legislature newlegislature 
    ON legislature.date_debut = newlegislature.date_debut 
    AND legislature.date_fin = newlegislature.date_fin

en supposant que vous n'avez pas plusieurs législatures avec les mêmes date de début et fin
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h46   #11
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
La correspondance des tables et champs me donne ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
INSERT INTO assnat.depute_legislatures (id_depute, id_legis)
SELECT newdeputes.id, newlegislatures.id
FROM deputes
INNER JOIN legislatures 
    ON legislatures.id = deputes.id
INNER JOIN assnat.deputes newdeputes 
    ON deputes.noms = newdeputes.noms
INNER JOIN assnat.legislatures newlegislature 
    ON legislatures.date_debut = newlegislature.date_debut 
    AND legislatures.date_fin = newlegislature.date_fin
Et j'ai cette erreur :
Citation:
#1054 - Unknown column 'newdeputes.id' in 'field list'
Qu'est-ce qui ne va pas?

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 17h09   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Comme ceci, je pense que ça ira mieux :
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
25
26
27
28
29
30
31
32
33
-- Vidage des nouvelles tables
DELETE FROM assnat.deputes;
DELETE FROM assnat.legislatures;
DELETE FROM assnat.depute_legislatures;
 
-- Réinitialisation des auto_incrémentations
ALTER TABLE assnat.deputes
AUTO_INCREMENT = 0;
 
ALTER TABLE assnat.legislatures
AUTO_INCREMENT = 0;
 
ALTER TABLE assnat.depute_legislatures
AUTO_INCREMENT = 0;
 
-- Remplissage des nouvelles tables
INSERT INTO assnat.deputes (noms)
SELECT DISTINCT noms
FROM deputes
ORDER BY noms;
 
INSERT INTO assnat.legislatures (date_debut, date_fin)
SELECT DISTINCT annee_debut, annee_fin
FROM lagislatures
ORDER BY annee_debut, annee_fin;
 
INSERT INTO assnat.depute_legislatures (id_depute, id_legis)
SELECT DISTINCT d.id_depute, l.id_legis
FROM deputes AS d1
INNER JOIN assnat.deputes AS d ON d.noms = d1.noms
INNER JOIN lagislatures AS l1 ON l1.id_legis = d1.legislature
    INNER JOIN assnat.legislatures AS l ON l.date_debut = l1.annee_debut AND l.date_fin = l1.annee_fin
ORDER BY d.id_depute, l.id_legis;
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 17h14   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Effectivement, d'après ce que vous aviez posté, cette colonne s'appelle id_depute

remplacez donc dans la requete les newdeputes.id par newdepute.id_depute
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 17h55   #14
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Comme ceci, je pense que ça ira mieux :
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
25
26
27
28
29
30
31
32
33
-- Vidage des nouvelles tables
DELETE FROM assnat.deputes;
DELETE FROM assnat.legislatures;
DELETE FROM assnat.depute_legislatures;
 
-- Réinitialisation des auto_incrémentations
ALTER TABLE assnat.deputes
AUTO_INCREMENT = 0;
 
ALTER TABLE assnat.legislatures
AUTO_INCREMENT = 0;
 
ALTER TABLE assnat.depute_legislatures
AUTO_INCREMENT = 0;
 
-- Remplissage des nouvelles tables
INSERT INTO assnat.deputes (noms)
SELECT DISTINCT noms
FROM deputes
ORDER BY noms;
 
INSERT INTO assnat.legislatures (date_debut, date_fin)
SELECT DISTINCT annee_debut, annee_fin
FROM lagislatures
ORDER BY annee_debut, annee_fin;
 
INSERT INTO assnat.depute_legislatures (id_depute, id_legis)
SELECT DISTINCT d.id_depute, l.id_legis
FROM deputes AS d1
INNER JOIN assnat.deputes AS d ON d.noms = d1.noms
INNER JOIN lagislatures AS l1 ON l1.id_legis = d1.legislature
    INNER JOIN assnat.legislatures AS l ON l.date_debut = l1.annee_debut AND l.date_fin = l1.annee_fin
ORDER BY d.id_depute, l.id_legis;
Exactement exact.

Merci...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 19h45   #15
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Bonsoir,
Code :
1
2
3
4
5
6
 
SELECT deputes.noms AS depute, COUNT(depute_legislatures.id_legis) AS total_legis, GROUP_CONCAT(CAST(depute_legislatures.id_legis AS CHAR) ORDER BY depute_legislatures.id_legis SEPARATOR ", " ) AS liste
        FROM deputes
				INNER JOIN depute_legislatures ON depute_legislatures.id_depute = deputes.id_depute
				GROUP BY depute_legislatures.id_depute 
				ORDER BY total_legis DESC, deputes.noms
Cette requete me donne la liste des députés, le nombre de législatures effectuées et la liste de ces législatures.
Exemple :
Citation:
Noms : Jean paul, Nombre de législatures :3 et liste des législature 6 | 7 | 8
Maintenant je souhaite ressortir cette liste pour une suite de législature et j'ai ajouté cette restriction pour 7 et 8 pour ceux qui ont fait 7 et 8..
Code :
1
2
 
WHERE depute_legislatures.id_legis IN (7,8)
J'ai plutôt comme résultat la liste des députés qui ont fait les législatures 7 et 8 et ceux qui ont fait uniquement la 8 législature.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 09h24   #16
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Coup classique !
Si tu veux les députés qui ont fait au moins la 7 et la 8, il faut filtrer comme tu l'as fait avec IN(7, 8) et compter le nombre de lignes de résultat par députés en ne gardant que ceux qui ont au moins deux lignes.
Code :
1
2
3
4
5
6
7
8
9
SELECT deputes.noms AS depute, 
  COUNT(depute_legislatures.id_legis) AS total_legis, 
  GROUP_CONCAT(CAST(depute_legislatures.id_legis AS CHAR) ORDER BY depute_legislatures.id_legis SEPARATOR ", " ) AS liste
FROM deputes
INNER JOIN depute_legislatures ON depute_legislatures.id_depute = deputes.id_depute
WHERE WHERE depute_legislatures.id_legis IN (7,8)
GROUP BY depute_legislatures.id_depute 
HAVING COUNT(*) > 1
ORDER BY total_legis DESC, deputes.noms
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h24   #17
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Coup classique !
Si tu veux les députés qui ont fait au moins la 7 et la 8, il faut filtrer comme tu l'as fait avec IN(7, 8) et compter le nombre de lignes de résultat par députés en ne gardant que ceux qui ont au moins deux lignes.
Code :
1
2
3
4
5
6
7
8
9
SELECT deputes.noms AS depute, 
  COUNT(depute_legislatures.id_legis) AS total_legis, 
  GROUP_CONCAT(CAST(depute_legislatures.id_legis AS CHAR) ORDER BY depute_legislatures.id_legis SEPARATOR ", " ) AS liste
FROM deputes
INNER JOIN depute_legislatures ON depute_legislatures.id_depute = deputes.id_depute
WHERE WHERE depute_legislatures.id_legis IN (7,8)
GROUP BY depute_legislatures.id_depute 
HAVING COUNT(*) > 1
ORDER BY total_legis DESC, deputes.noms
Exactement exact maitre , merci...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h16   #18
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Pour mes besoins, j'ai modifié ainsi ma table depute_legislatures
Code :
1
2
3
4
5
6
7
8
 
CREATE TABLE IF NOT EXISTS `depute_legislatures` (
  `id_depute` int(11) NOT NULL,
  `id_legis` int(11) NOT NULL,
  `id_parti` int(11) NOT NULL,
  `suppleant` int(11) NOT NULL,
  `decede` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
et cette dernière est liée à partis_politiques
Code :
1
2
3
4
5
6
7
 
CREATE TABLE IF NOT EXISTS `partis_politiques` (
  `id_parti` int(11) NOT NULL AUTO_INCREMENT,
  `sigle` varchar(255) NOT NULL,
  `logo` varchar(255) NOT NULL,
  PRIMARY KEY (`id_parti`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
et
Code :
1
2
3
4
5
6
7
 
SELECT partis_politiques.sigle, count(depute_legislatures.id_depute) AS nb_deputes FROM `legislatures` 
INNER JOIN depute_legislatures ON depute_legislatures.id_legis = legislatures.id_legis
INNER JOIN partis_politiques ON depute_legislatures.id_parti = partis_politiques.id_parti
WHERE depute_legislatures.id_legis = 8
GROUP BY depute_legislatures.id_parti 
ORDER BY nb_deputes DESC;
cette requête me donne le nombre de députés que compte chaque parti politique par législature et ca roule super bien.

Ce que je souhaite maintenant faire c'est dans la même requête ressortir le nombre total de députés pour une législature donnée qui est en faite la somme des nombres de députés que compte chaque parti.
Je pense avoir été clair.

merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h23   #19
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Citation:
Envoyé par okoweb Voir le message
Ce que je souhaite maintenant faire c'est dans la même requête ressortir le nombre total de députés pour une législature donnée qui est en faite la somme des nombres de députés que compte chaque parti.
Je pense avoir été clair.
J'ai essayé ceci, ca ne donne pas
Code :
1
2
3
4
5
 
SELECT SUM(count(depute_legislatures.id_depute)) AS nb_deputes FROM `legislatures` 
INNER JOIN depute_legislatures ON depute_legislatures.id_legis = legislatures.id_legis
WHERE depute_legislatures.id_legis = 8
GROUP BY depute_legislatures.id_parti;
j'obtiens cet erreur :
Citation:
#1111 - Invalid use of group function
ca veut dire quoi?
okoweb 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 15h25.


 
 
 
 
Partenaires

Hébergement Web