Probleme de jointure

Marlocq Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
voila mon soucis j ai une table date dans laquelle j'ai plusieurs données et qui peut etre lièe a plusieurs heures dans la table heure et une table heure qui est a une donnée heure
ou date 0/n 1/1 heure.

le soucis est comment faire en une seule requête pour n'avoir qu'une seule fois les données relative à la date mais toutes les heures.

Pour le moment je fais ça:
$req_date_adm = " SELECT date , id_date , h_recup_journa , h_recup_total FROM datebadge WHERE date='$fincs_get' AND id_uti='$idmembres' ";
	$req_date_admi = $db_conn->query($req_date_adm);
	while ($r_d_a = $req_date_admi->fetch()) {
		$id_date = $r_d_a['id_date'];
		$date = $r_d_a['date'];
		$h_recup_journa = $r_d_a['h_recup_journa'];
		$h_recup_total = $r_d_a['h_recup_total'];
		$req_heure =" SELECT heure 
					FROM heuretat
					WHERE (id_date='$id_date' and etat='ok') OR (id_date='$id_date' and etat='missio') OR (id_date='$id_date' and etat='oub')";
		$reque_heure = $db_conn->query($req_heure);
		while ($requete_heure = $reque_heure->fetch()) {
			$heure = $requete_heure['heure'];
		}


j'ai essayer ça comme requête en utilisant une jointure
	$req_date_adm = " SELECT p1.date , p1.id_date , p1.h_recup_journa , p1.h_recup_total , p2.heure FROM datebadge p1 INNER JOIN heuretat p2 ON p1.id_date=p2.id_date WHERE p1.date='$fincs_get' AND p1.id_uti='$idmembres' ";


Le soucis c'est la redondance d'information dans le retour avec la jointure (je ne sais pas si je suis clair)

le premier me retourne une fois les informations de la date et plusieurs fois les heures
le deuxième retourne toutes les informations de la date pour chaque heure

et ça doit donc foire comme le premier mais que je fais en deux requêtes....

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
non, ce n'est pas clair. tu ne nous donnes même pas la liste des champs des deux tables.
le plus important à clarifier, je pense, c'est "avoir une seule fois les données relative à la date mais toutes les heures".
le mieux c'est que tu donnes un exemple avec quelques données dans les deux tables.
qu'obtiens-tu avec la requête que tu fais?
que veux-tu obtenir à la place?
une autre façon de clarifier, c'est d'expliquer à quoi servent ces données, et ce que tu veux faire avec le résultat.
par ailleurs, il est possible que tu puisses arriver à faire ce que tu veux en structurant tes données autrement, ou en écrivant ton programme autrement. tu ne nous montres pas la partie de ton programme qui utilise les données.
0
Marlocq Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
 
table date:

id_date / date / h_rec_journa / h_rec_total /
1 / 1578009600 / 15 / -39
2 / 1582070400 / 15 / -24

table heure:
id_heure / heure / id_date
1 / 476 / 1
2 / 481 / 2
3 / 724 / 1
4 / 742 / 1
5 / 979 / 1
6 / 632 / 2
7 / 714 / 2


pour la première:
date hrj hrt heure heure heure heure
1578009600 / 15 / -39 / 476 / 724 / 742 / 979 (dans une table après incrémentation des td etc. )


pour la deuxième:
date hrj hrc heure
1578009600 / 15 / -39 / 476

1578009600 / 15 / -39 / 724

1578009600 / 15 / -39 / 742

1578009600 / 15 / -39 / 979

donc ce que je veux c'est d'un coté n'avoir qu'une fois les données relative à la date et toutes les heures liées à cette date comme sur le premier retourd (je ne sais pas comment créer un affichage plus clair sur se forum...)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
moi, j'utiliserais la deuxième requête, et je parcourrais le résultat, en regroupant les heures jusqu'à ce que la date change.
0