Probleme de jointure

Fermé
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023 - 4 mars 2020 à 14:37
yg_be Messages postés 23358 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 - 4 mars 2020 à 16:18
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 23358 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 555
Modifié le 4 mars 2020 à 15:21
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 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
Modifié le 4 mars 2020 à 15:43
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 23358 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 555
4 mars 2020 à 16:18
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