SQL besoin d'un coup de main sur une requete svp (och).

SQL besoin d'un coup de main sur une requete svp (och). - SQL/NoSQL - Programmation

Marsh Posté le 17-10-2003 à 10:56:40    

:hello: a tous,
ca fait longtemps que j'ai pas pratique sql et la je galere...
je cherce a faire une requete qui me relie 3 tables : tache, categorie et surcat .
 
une tache comporte un champ id_cat qui existe également dans la table categorie . Une categorie appartient également à une surcatégorie .
 
ce que je souhaite c'est récupéré toutes les taches qui appartiennent à une catégorie ayant une surcatégorie définnie .
pour l'instant j'ai ca mais ca deconne :
 


//Parcours la table surcat et calcule la somme des durees des taches appartenant a cette surcat
 
$sql2="select * from surcat order by nom asc";
$resu2=mysql_query($sql2);
while($nb2=mysql_fetch_array($resu2))  
{
echo " <strong>$nb2[nom] : </strong> ";
 
$sql3="select sum(tache.duree) as duree , tache.id_cat , categorie.id_cat , surcat ,id_surcat from tache , categorie , surcat where  date_cloture > '$mois-01 00:00:00' and date_cloture < '$mois-31 23:59:59' and affectee<>8 and (tache.id_cat=categorie.id_cat AND categorie.surcat='$nb2[id_surcat]') group by surcat";
$resu3=mysql_query($sql3) or die (mysql_error());
$nb3=mysql_fetch_array($resu3);
$temps=round($nb3[duree]);
$prop=$temps*100/$total;
echo " $temps heures soit <strong>$prop % du total </strong><br>";
 
}


 
 
la somme des durees de la 1ere surcat depasse la duree totale (j'ai l'impression que j'obtiens le double de ce que je devrais avoir) donc ma requete doit etre complement foireuse mais je vois pas trop comment faire...
 
merci de votre aide !


Message édité par kayasax le 17-10-2003 à 11:06:15
Reply

Marsh Posté le 17-10-2003 à 10:56:40   

Reply

Marsh Posté le 17-10-2003 à 12:59:48    

id_cat jointure entre tache et categorie mais ...
Il te manque la jointure entre categorie et surcat  
à priori ...

Reply

Marsh Posté le 17-10-2003 à 13:37:18    

au lieu de poster ton code PHP (illisble) tu peux pas poster ta requête bien formattée, et avec des retours à la ligne ?


Message édité par MagicBuzz le 17-10-2003 à 13:37:31
Reply

Marsh Posté le 17-10-2003 à 21:32:59    

Bon ben ça donne ça en  + clair...
 
 

Code :
  1. select * from surcat order by nom asc
  2. $nb2 = result

 ok :)  
 

Code :
  1. select sum(tache.duree) as duree ,
  2.        tache.id_cat ,
  3.        categorie.id_cat ,
  4.        surcat ,
  5.        id_surcat
  6. from tache , categorie , surcat
  7. where  date_cloture > '$mois-01 00:00:00'
  8. and date_cloture < '$mois-31 23:59:59'
  9. and affectee<>8
  10. and ( tache.id_cat=categorie.id_cat
  11.      AND categorie.surcat='$nb2[id_surcat]'
  12.     )
  13. group by surcat


là pas OK...
 
pourquoi tu fais le lien sur  

Code :
  1. categorie.surcat='$nb2[id_surcat]'

 
alors que tu as l'air d'avoir un id_surcat plus pratique ???
 

Reply

Marsh Posté le 17-10-2003 à 21:39:49    


 :pfff: je pense vraiment que ça coince là comparer id_surcat à surcat je comprends pas ...

Code :
  1. AND categorie.surcat='$nb2[id_surcat]'


 
  :heink:

Reply

Marsh Posté le 20-10-2003 à 11:12:46    

merci pour votre aide...
faut pas etre choqué, le champs categorie.surcat correspond à surcat.id_surcat (j'ai juste pas nommé les champs pareil) .
 
Bon actuellement j'ai laissé tomber les jointures, je fais 3 requetes imbriquées ( : o )

Reply

Marsh Posté le 20-10-2003 à 11:22:00    

Voilà, normalement, ça donne ça :
 

select sum(tache.duree) as duree, t.id_cat, c.id_cat, c.surcat, c.id_surcat
from tache t, categorie c
where c.surcat = '$nb2[id_surcat]'
and t.id_cat = c.id_cat
and t.date_cloture > '$mois-01 00:00:00'  
and t.date_cloture < '$mois-31 23:59:59'  
and t.affectee <> 8
group by t.id_cat, c.id_cat, c.surcat, c.id_surcat


 
PS: la table surcat est inutile, puisque tu connais l'id_surcat, qui est dans categorie.

Reply

Marsh Posté le 20-10-2003 à 13:53:49    

MagicBuzz a écrit :

Voilà, normalement, ça donne ça :
 

select sum(tache.duree) as duree, t.id_cat, c.id_cat, c.surcat, c.id_surcat
from tache t, categorie c
where c.surcat = '$nb2[id_surcat]'
and t.id_cat = c.id_cat
and t.date_cloture > '$mois-01 00:00:00'  
and t.date_cloture < '$mois-31 23:59:59'  
and t.affectee <> 8
group by t.id_cat, c.id_cat, c.surcat, c.id_surcat


 
PS: la table surcat est inutile, puisque tu connais l'id_surcat, qui est dans categorie.


 
Cool merci !! La table surcat me sert juste à récupérer le nom de la surcat .
Donc mon pb c'etait juste une histoire de group by ??
 
@+

Reply

Marsh Posté le 20-10-2003 à 15:22:00    

je pense oui.
si tu rajoute surcat dans la requête, ajoute une ligne :
 
and s.curcat = c.surcat

Reply

Sujets relatifs:

Leave a Replay

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