Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 15/10/2011, 19h19   #1
Invité de passage
 
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
Par défaut Select + where + count sur 2 tables différentes

Bonjour à tous,

Voilà, ça fait quelques heures que je galère mais quand ça veut pas, ça veut pas !

J'ai 2 tables : table1 et table2, structuré comme suit (pour faire simple) :
- table1 : id, name
- table2 : id, name, id_table1

Le but est d'interroger la table1 en retournant les résultats classés selon le nombre de concordances de la table2. Par exemple :

table 1 :
1 - Test1
2 - Test2
3 - Test3
4 - Test4
etc...

table 2 :
1 - Image1 - 2
2 - Image2 - 2
3 - Image3 - 1
4 - Image4 - 2

et en résultant, je voudrais obtenir :
Test3 > 0 concordance
Test4 > 0 concordance
Test1 > 1 concordance
Test2 > 3 concordances

Avec ceci :
Code :
1
2
3
4
5
SELECT a.*, count(b.id) AS cnt 
FROM table1 AS a,table2 AS b 
WHERE a.id=b.id_table1 
GROUP BY b.id_table1 
ORDER BY cnt, a.name
Ca marche... en partie puisque j'obtiens :
Test1 > 1 concordance
Test2 > 3 concordances
Mais il manque Test3 et Test4 avec les 0 concordances !

Du coup, à moins de finir chauve à m'arracher les cheveux, help !!!
D'avance, merci !!!!
Cedios est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 07h27   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Il faut faire une jointure externe.
En même temps, apprends donc la syntaxe des jointures en vigueur depuis 1992 !
__________________
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 17/10/2011, 08h45   #3
Invité de passage
 
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
C'est bien l'une des premières choses que j'ai essayé LEFT JOIN, WHERE NOT EXISTS, etc... mais j'ai dû me planté quelque part (ou que j'ai oublié un truc, c'est fort possible). Faut dire que je maitrise pas à 100% les jointures, je les utilise 1 fois par an au bas mot et je galère à chaque fois donc tu comprendras qu'un exemple concret peut être le bienvenu
Cedios est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 10h08   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Pourquoi aller chercher un NOT EXISTS ?

Code :
1
2
3
4
5
6
SELECT a./* les colonnes nécessaires et pas étoile ! */, 
	count(b.id) AS cnt 
FROM table1 AS a
LEFT OUTER JOIN table2 AS b ON a.id = b.id_table1 
GROUP BY a.id /* et toutes les colonnes du select autre que le COUNT */
ORDER BY count(b.id), a.name
__________________
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 17/10/2011, 12h09   #5
Invité de passage
 
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
Je suis un peu maso sur les bords, j'ai tout essayé

et là, je vois le LEFT OUTER JOIN et je me dis, quel con ! J'ai pas pensé au OUTER

Je testerais ça ce soir vu que là je peux pas mais à première vue, c'est exactement ça
Cedios est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 12h09   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
OUTER est un mot facultatif
__________________
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 17/10/2011, 19h13   #7
Invité de passage
 
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
je suis venu, j'ai demandu, on m'a répondu, et ça marchu
Voilà une épine au pied en moins ! Encore merci beaucoup pour ce coup de pouce et regard extérieur
Cedios 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