Accueil > Forum > > > > Rajouter un champ dans un select
Rajouter un champ dans un select
mardi 12 octobre 2010 à 12:56:59 |
Rajouter un champ dans un select

davidbdjt2
|
Bonjour,
jexplique ce que je souhaite avec un exemple, ca sera plus facile :
jai 2 table : table1, table2
table1
id ...
1
2
3
4
table2
id table1_id ...
1 1
2 1
3 1
4 2
5 2
6 2
7 2
8 3
je voudrais a present faire un SELECT qui me rendrait la table1 avec le nombre doccurence (total) de la table2
table1
id total
1 3
2 4
3 1
4 0
Merci de votre aide !!!
|
|
mardi 12 octobre 2010 à 16:26:19 |
Re : Rajouter un champ dans un select

neigedhiver
|
Salut,
Quelque chose dans ce genre :
Code : SELECT t2.id AS id, count(t1.id) AS nb
FROM table2 t2, table1 t1
WHERE t1.id = t2.id
GROUP BY t2.id
ORDER BY t2.id ASC;
J'ai testé chez moi avec des tables déjà existantes, ça fonctionne. J'ai transposé, normalement... ça devrait fonctionner.
Je profite de ce post pour attirer ton attention sur un point très très important dans la conception de ta base de données.
Dans une BASE DE DONNÉES une donnée ne peut avoir qu'un seul et unique nom. Inversement, dans une BASE DE DONNÉES, un nom de donnée ne peut représenter qu'une seule et unique donnée.
Respecter cette règle permet de garantir l'intégrité de tes données et donc de ta base. Accessoirement, ça te permet de ne pas te mélanger...
Tu ne devrais donc pas avoir plusieurs identifiants qui portent le nom `id`. Et la donnée nommée `id` ne peut représenter qu'un seul champ d'une seule table.
Ne pas suivre cette règle ne fait pas que ça ne fonctionne pas... Le moteur du SGBDR est capable de s'en sortir, avec des messages d'erreur quand il y a ambiguïté. Mais un outil de Reverse Engineering se perdrait dans les données. De même, un outil de conception ne comprendrait rien à ce que tu veux faire.
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mardi 12 octobre 2010 à 16:28:46 |
Re : Rajouter un champ dans un select

neigedhiver
|
Je me rends compte que j'ai peut-être inversé les ID des tables quelque part... J'ai du mal à savoir où, justement à cause du point que je soulève dans mon post précédent : je me suis perdu dans les ID...
Le COUNT doit être exécuté sur les ID que tu souhaites compter dans l'autre table.
Le GROUP BY doit concerner la table qui "contient" l'autre (la table parent quoi).
Je sais pas si c'est clair...
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mercredi 13 octobre 2010 à 05:05:58 |
Re : Rajouter un champ dans un select

deithso
|
Bonjour,
la requête proposer par neigedhiver est correcte, fallait juste appliquer les changements cités dans son 2eme poste ce qui donne :
Code : SELECT t1.id AS id, count( id_table1 ) AS total
FROM table1 t1, table2 t2
WHERE t1.id = t2.id_table1
GROUP BY t1.id
ORDER BY t1.id ASC
sauf que tu n'auras pas le zéro pour ton id=4;
|
|
mercredi 13 octobre 2010 à 05:12:17 |
Re : Rajouter un champ dans un select

deithso
|
j'ai oublié une chose dont j'ai voulu parle, c'est le choix du titre du sujet, ton titre n'a aucune relation avec le contenu, c'est une règle qui est très importante à respecter quand on crée un sujet, ne jamais écrire le titre avant le contenu.
le titre doit être en quelque sort le résumé du contenu, pour que les autres qui vont t'aider, puissent savoir en avance de quoi s'agit-il, ainsi que pour les autres qui cherchent des sujets qui ressemblent le plus à leurs problèmes,
je ne me mini-modo pas, c'est juste un conseil pour tout le monde,
|
|
mercredi 13 octobre 2010 à 11:06:18 |
Re : Rajouter un champ dans un select

neigedhiver
|
Moui, en fait on peut avoir le compte 0 :
Je prends un exemple que je viens de tester chez moi :
Code : table1
id_t1 title
1 cat1
2 cat2
3 cat3
4 cat4
5 cat5
table2
id_t2 id_t1 name
1 1 item1
2 1 item2
3 2 item3
4 1 item4
5 3 item5
6 4 item6
7 4 item7
8 2 item8 Code :
Voici la requête :
Code : SELECT t1.id_t1, COUNT(t2.id_t1) AS total
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id_t1 = t2.id_t1
GROUP BY t1.id_t1
Résultat :
Code : id_t1 total
1 3
2 2
3 1
4 2
5 0
Y'a juste un truc que je comprends pas : j'ai fait je sais pas combien d'essais dans tous les sens, j'arrivais pas à avoir la ligne dans laquel le total est 0. Je m'apprêtais à faire un mail à mon frère qui me sert de support niveau 3 en SQL, et j'ai réécrit ma requête pour lui envoyer... Et là, paf, j'avais tout...
Il y a donc peut-être une subtilité à l'ordre dans lequel sont sélectionnées les tables (quelle table est jointe sur l'autre et dans quel sens : LEFT JOIN ou RIGHT JOIN), l'id sur lequel on fait le GROUP BY, ... Le problème c'est que j'arrive plus à avoir une requête qui ne me retourne pas la ligne avec le total 0...
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mercredi 13 octobre 2010 à 13:07:33 |
Re : Rajouter un champ dans un select

deithso
|
mwai j'avais pensé aux jointures, mais j'ai pas testé,
j'ai fait juste e test avec ton code, j'ai changé l'ordre des tables et j'ai eu le résultat sans le 0,
il faut juste faire une jointure right pour ne pas avoir 0 en retour,
Code : SELECT t1.id, COUNT( t2.id_table1 ) AS total
FROM table1 t1
RIGHT JOIN table2 t2 ON t1.id = t2.id_table1
GROUP BY t1.id
Textes complets
id total
1 3
2 4
3 1
|
|
mercredi 13 octobre 2010 à 14:06:40 |
Re : Rajouter un champ dans un select

neigedhiver
|
Ah oui voilà. Suivant la table que l'on joint sur l'autre... Si on joint la table qui ne contient pas l'id sans correspondance sur l'autre, on aura cette ligne qui sortira.
Pour être plus clair, on peut faire un schéma avec les deux tables l'une à côté de l'autre. LEFT JOIN joindra celle de droite sur celle de gauche. On récupèrera alors tous les enregistrements qui collent avec la table de gauche, même si le COUNT doit être 0. Inversement, si un COUNT fait 0, l'id correspondant ne sera pas dans la table, en joignant la table de gauche, celui qui n'apparait pas à droite n'apparaitra pas du tout.
C'est pas très français, ce que je dis, j'ai du mal à faire plus explicite avec des mots...
C'est pour ça qu'inverser l'ordre dans lequel on tape sur les tables ou la nature de la jointure (LEFT ou RIGHT) est équivalent.
Sinon, quand on fait :
Code : SELECT .....
FROM table1, TABLE2
c'est une jointure. Elle n'est pas explicite, mais c'en est quand même une. Il faut alors utiliser WHERE pour limiter les enregistrements.
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mercredi 13 octobre 2010 à 14:11:25 |
Re : Rajouter un champ dans un select

deithso
|
oui correct  , c'est claire ce que tu viens de dire neigedhiver
|
|
Cette discussion est classée dans : select, id, rajouter, table2, table1
Répondre à ce message
Sujets en rapport avec ce message
Boucle jointure [ par gabi77 ]
BoujourMon probleme est le suivant.J'ai trois table table1, table2, jointure_table1_table2dans jointure_table1_table2 je recupere id_table1 et id_tabl
select modifier des qu'on change le select ... [ par plopinou ]
Bonjour, voila j'ai un probleme avec mon programme, fin une amelioration que je voudrai faire et quie j'ai deja essaye mais qui fonctionne pas ...
Faire une requete a partir d une requete .... [ par OncleDude ]
Bonjour, est-il possible de faire: $req = "SELECT id_tache FROM groupe WHERE id_pers=".$mon_id=$_SESSION['id_popeye']; $tab = mysql_query($req); $r
pb de delete [ par ninjafury ]
Bonjour tout le mondevoilà le message que j'ai execution de la requête impossibleet voici le code que j'utilise/* Récupération des donnée
Call to undefined function: select_categories_db() [ par coyote_fx ]
Hello à tous,voilà j'ai un petit problème... Mais c'est un peu compliqué... En gros je stocke toutes mes fonctions dans plusieurs fichiers (connect.ph
multi select Dynamique power 2 ^^ [ par Teclis01 ]
voilà j ai un petit soucis avec ajax là ...en fait je voudrais que l utilisateur utilise des select pour affinner son choix alors je remplis mon premi
Somme de deux requetes SQL [ par ephores ]
Bonjour à tous ;J'ai deux tables nommé table1 et table2,Chacune ont une rubrique " montant"j'ai crée deux requete chacune donnant le résultat de la s
requete sql assez complexe [ par sebmaster001 ]
bonjour à tous, je ne suis pas habitué à poster pour demander de l'aide, mais la, le temps presse... je vous remercie donc d'avance de l'aide que v
RÉCUPÉRER TOUTES LES VALEURS D'UN SELECT DANS UNE VARIABLE PHP [ par method0 ]
methodsalut a tous, Avant tout chose je precise que je suis debutant.et j'espere que mon post sera comprehensibleJe dois implementer des liste deroula
[Problème] Mysql & Select ... not in ... [ par shanicot ]
Salut, J'essaie de faire fonctionner cette requête sql sur un serveur qui ne prends pas en compte la subrequête après le NOT IN : select *
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Forum
SELECTSELECT par hab2oo
Cliquez pour lire la suite par hab2oo
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|