Utilisation de plusieurs tables

craac
Invité n'ayant pas de compte PHPfrance

30 août 2007, 14:55

Bonjour,

Je voudrai créer une page php me permettant de générer une facture des activités auquels des adherents ont participé.

Pour cela, j'ai crée :

une table "adherents" avec le nom, prénom, reduction de tarif , etc...
une table "activités" avec l'intitulé, la date, le tarif, coût supplémentaire, etc ....
une table contenant le nom de l'adhérent et les activités auquelles il a participés (sous forme d'ID, en correspondance avec l'ID contenu dans la table "activités")

Premiére question : ai-je bien fait de créer mes tables ainsi ?

J'ai une premiere page me donnant la liste des adherents. Je voudrai, en cliquant sur le nom d'un adherent, obtenir une page listant les activités auquelles l'adherent à participé,

mais également effectuer un calcul pour chaque activité (tarif + coût supplémentaire [ce qui me donne le coût total de l'activité])

et aussi additioner le total de chaque activité pour obtenir un total "général"

Deuxiéme question : Quelle est la méthode pour arriver a ce résultat ?

En vous remerciant

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 août 2007, 15:44

Premiére question : ai-je bien fait de créer mes tables ainsi ?
Oui :)
C'est effectivement comme cela qu'il faut procéder pour lier deux tables avec chacune une cardinalité 0..N (un élément d'une table peut être rattaché à "de 0 à N" éléments de l'autre table)
Deuxiéme question : Quelle est la méthode pour arriver a ce résultat ?
Sur ta page listant les adhérents, il te faut ajouter un lien pour chaque adhérent afin d'ouvrir une nouvelle page en lui passant en paramètre l'id de l'adhérent : "ma_page.php?id=xxx"

Sur cette page, il te faut récupérer l'idAdhérent passé en paramètre, et interroger la table de liaison pour connaitre toutes les activités auxquels cet id est associés, et récupérer (avec une jointure) la correspondance dans la table activités pour connaitre les noms et autres infos utiles. Cela se fait donc en SQL.

Lorsque tu affiches les résultats grace a une boucle php, il te suffit de définir une variable dans laquelle tu vas cumuler les différentes valeurs récupérées à chaque enregistrement ($cumul = $cumul + $nouvelleValeur), ce qui te permet d'afficher un total à la sortie de ta boucle :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 1029 Messages

31 août 2007, 15:48

Bonjour, la troisième table ne devrais contenir que 3 champs

Code : Tout sélectionner

id id_adhérents id_activites

Il est en effet inutile de remettre le nom de l'adhérent dans la troisième table, puisque tu l'as déjà quelques part.

par contre il te manques l'id adhérents(pour justement récupérer le nom).

Maintenant soit plus clair pour les opérations à effectuer.

Met nous les tables complètes et un petit bout que tu as essayer.

MaitrePylos
L'expérience est la somme de toutes nos erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 août 2007, 15:53

Bah à la limite 2 champs suffisent largement.. l'id de l'enregistrement n'a pas vraiment d'intérêt (et ne sera d'ailleurs probablement jamais utilisée), à moins qu'un utilisateur puisse être lié plusieurs fois à la même activité. Mais sinon, le couple id_activite/id_adherent (éviter les accents dans les noms des champs ou variables plz ;)) est déjà une clé primaire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

craac
Invité n'ayant pas de compte PHPfrance

05 sept. 2007, 13:18

merci de vos réponses :)


je selectionne les prestations impayées pour un adhérent précis (recup de l'id par GET à partir de la liste des noms des adhérents).

ma requete :

Code : Tout sélectionner

$query_req = "SELECT * FROM inscriptionaj, listing, ajinfos WHERE inscriptionaj.ins_id='$_GET[id]' AND listing.liste_nom = inscriptionaj.ins_nom AND listing.liste_id = ajinfos.info_id AND ajinfos.info_du = 1"; $req = mysql_query($query_req, $sql) or die(mysql_error()); $row_req = mysql_fetch_assoc($req);
je calcule ensuite le total pour chaque prestation :

Code : Tout sélectionner

<?php $total = $row_req['info_tarif']+ $row_req['info_sup']; echo $total;?>
je desire maintenant faire le cumul de tout les totaux.
Lorsque tu affiches les résultats grace a une boucle php, il te suffit de définir une variable dans laquelle tu vas cumuler les différentes valeurs récupérées à chaque enregistrement ($cumul = $cumul + $nouvelleValeur), ce qui te permet d'afficher un total à la sortie de ta boucle
je ne comprends pas bien comment mettre en place ce que ryle me dit :/

Invité
Invité n'ayant pas de compte PHPfrance

05 sept. 2007, 17:19

probleme resolu :)