count , jointure deux tables pour ramener une valeur 0

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : count , jointure deux tables pour ramener une valeur 0

Re: count , jointure deux tables pour ramener une valeur 0

par moogli » 06 janv. 2017, 16:16

de rien, pense à cliquer sur résolu quand c'est le cas stp (en haut à droite du titre) ;)
je le fait pour toi cette fois :)

@+

Re: count , jointure deux tables pour ramener une valeur 0

par smallweb » 06 janv. 2017, 15:28

merci , ça marche

Re: count , jointure deux tables pour ramener une valeur 0

par moogli » 06 janv. 2017, 12:24

intéressant, je n'aurais pas pensé à faire comme ça.
petite correction syntaxique pour mysql (pas de a.*)
explain 
SELECT 
  a.idag,
  nom,
  prenoms,
  COUNT(p.idpermis) AS nbPermis
FROM 
  agriculteur AS a
left JOIN permis AS p
    ON a.idag = p.idag
GROUP BY
  a.idag,nom,prenoms
coté perf je me demande lequel est le mieux, les "explain" sont pas super clair :)

subselect
explain_subselect.png
jointure
explain_jointure.png
a priori je dirais le subselect qui n'utilise pas de table temporaire, mais sans être super certain.

@+

Re: count , jointure deux tables pour ramener une valeur 0

par zeus » 05 janv. 2017, 20:11

Ça pourrait se faire avec une simple jointure :

Code : Tout sélectionner

SELECT idag, nom, prenoms, COUNT(p.id) AS nbPermis FROM agriculteur AS a OUTER LEFT JOIN permis AS p ON a.idag = p.idag GROUP BY a.*

Re: count , jointure deux tables pour ramener une valeur 0

par moogli » 05 janv. 2017, 18:44

salut,

si tu souhaite que le nb de permis passe par une sous requête. La jointure c'est si tu as besoin des données (jointure externe dans ton cas).
Dans ton cas la requête est bonne (bon tu le sais déjà) mais ne travaille que sur les données présentes dans la table permis, or toi tu veux te baser sur la table agriculteurs
ce qui donne
SELECT idag,
  nom,
  prenoms,
  (SELECT COUNT(1) FROM permis p WHERE p.idag = a.idag
  ) AS nbPermis
FROM agriculteur a
tu auras une colonne "nbPermis" pour chaque ligne de résultat avec les infos des agriculteurs

si tu veux afficher les permis de chaque agriculteur il te faudra une jointure externe (oui je sais déjà dit ;) ) et organiser une césure dans le code PHP pour afficher la chose proprement.

@+

count , jointure deux tables pour ramener une valeur 0

par smallweb » 05 janv. 2017, 17:47

Bonjour,
j’ai un problème en sql . je rappelle que j'utilise mysql
j'ai deux tables, la table agriculteur et la table permis
agiculteur(idag,nom, prenoms, ...)
permis ( idpermis ,idag, taille,...)

en utilisant count , j'obtiens le nombre de permis que possède un agriculteur .

SELECT idag,COUNT(*) as Nbrepermis FROM PERMIS GROUP BY idag ORDER BY idag ASC
Mais je veux que ma requete mette aussi la valeur 0 pour les agriculteurs qui n'ont pas encore eu de permis. j'ai vu des exemple de jointure,
mais sincèrement je n'arrive pas à écrire la requête.
Merci de donner un coup de main.
Cordialement