MYSQL problème count via out join

MYSQL problème count via out join - SQL/NoSQL - Programmation

Marsh Posté le 01-10-2013 à 10:43:31    

Bonjour à tous je galère depuis quelque jours et je viens demander de l'aide à la communauté.
 
J'ai une application en cours de développement et je suis entrain de faire des statistiques sur les dossiers de l'application.
Je vais pas tout détailler les stats que je dois faire la se base sur 2 table
 
J'ai donc une table t_dossier et une table t_jugement
la table dossier à un champs RID_ID et la table jugement un champs T_DOSSIER_RID_ID : cela permet donc de faire la relation.
Dans la table jugement j'ai en autre  
1 champ JUG_SENS pour mettre le sens du jugement
1 champs JUG_DATE pour la date du jugement.
 
Et dans la table dossier j'ai un champs RID_ID_DEFENSEUR qui stock l'identifiant du service défendeur (oui y une faute de frappe )
donc
je dois dire combien de dossier non juge il y à par chaque service défendeur.  
Sachant qu'un dossier non juger est définit par la non présensence du dossier dans la table jugement mais aussi il se peut qu'il y a des information de saison dans la table jugement (dautre champs) pour un dossier mais c'est pas pour autant qu'il est juger (peut y avoir des champs d'information) c'est pourquoi si c'est le cas un dossier non juger mais donc l ID du dossier est présent dans jugement est définit par la valeur du champs JUG_SENS à "n" et JUG_DATE à '0000-00-00'
 
Voila pour l'histoire.
 
Donc dans un premier temps j'ai fait la requete pour l'ensemble des dossier jusque la pas de soucis la requete en elle meme est
 

Code :
  1. SELECT COUNT(a.RID_ID) AS NB
  2. FROM t_dossier AS a
  3. LEFT OUTER JOIN t_jugement AS c
  4. ON ( c.T_DOSSIER_RID_ID = a.RID_ID )
  5. WHERE
  6. c.T_DOSSIER_RID_ID = a.RID_ID AND
  7. c.JUG_DATE = '0000-00-00' AND
  8. (c.JUG_SENS = 'n' OR c.JUG_SENS = NULL ) OR
  9. c.T_DOSSIER_RID_ID IS NULL


 
cela fonctionne bien mais si je rajoute une ligne pour identifiant du défendeur cela marche plus  
genre
 

Code :
  1. SELECT COUNT(a.RID_ID) AS NB
  2. FROM t_dossier AS a
  3. LEFT OUTER JOIN t_jugement AS c
  4. ON ( c.T_DOSSIER_RID_ID = a.RID_ID )
  5. WHERE
  6. a.RID_ID_DEFENSEUR = '3' AND
  7. c.T_DOSSIER_RID_ID = a.RID_ID AND
  8. c.JUG_DATE = '0000-00-00' AND
  9. (c.JUG_SENS = 'n' OR c.JUG_SENS = NULL ) OR
  10. c.T_DOSSIER_RID_ID IS NULL


 
une idée ?
 
merci d'avance

Reply

Marsh Posté le 01-10-2013 à 10:43:31   

Reply

Marsh Posté le 01-10-2013 à 11:03:57    

Par contre si je fait un RIGHT OUTER c'est deja mieu
Seulement il me prend pas les condition (JUG_DATE et JUG_SENS) il me totalise le tout meme si la date est rempli et le sens est différent de n
 
donc requete
 

Code :
  1. SELECT c.T_DOSSIER_RID_ID, COUNT(a.RID_ID) AS NB
  2.     FROM t_dossier AS a
  3.     RIGHT OUTER JOIN t_jugement AS c
  4.     ON ( c.T_DOSSIER_RID_ID = a.RID_ID )
  5.     WHERE
  6.     a.RID_ID_DEFENSEUR = '2' AND
  7.     c.T_DOSSIER_RID_ID = a.RID_ID AND
  8.     c.JUG_DATE = '0000-00-00' AND
  9.     (c.JUG_SENS = 'n' OR c.JUG_SENS = NULL ) OR
  10.     c.T_DOSSIER_RID_ID IS NULL

Reply

Marsh Posté le 01-10-2013 à 13:27:59    

Bon bah j'ai trouver tout seul a force de bidouiller la requete.
 
je met la solution en cas ou
 

Code :
  1. SELECT a.RID_ID
  2.       FROM t_dossier AS a
  3.     LEFT OUTER JOIN t_jugement AS c
  4.     ON ( c.T_DOSSIER_RID_ID = a.RID_ID)
  5.      WHERE
  6.     (c.JUG_DATE = '0000-00-00' OR
  7.     (c.JUG_SENS = 'n' OR c.JUG_SENS = NULL ) OR
  8.      c.T_DOSSIER_RID_ID IS NULL ) AND a.RID_ID_DEFENSEUR = 'ici l'identifiant du service"


 
Peut etre y à t'il plus propre par contre ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed