Bonjour,
Je veux créer un annuaire d'entreprises ("fournisseurs") étant intervenues sur nos différents chantiers, avec un système de notation et de commentaire associé.
L’utilisateur s’identifie sur le site et lorsqu’il va sur sa page apparait la liste des entreprises qui ont participé à ses chantiers qu’il lui reste à noter. C’est là mon problème : ne faire apparaitre dans la liste que les entreprises qu’il n’a pas encore notées.
Ma base de données a donc une table « fournisseurs », « chantiers », « contact » et « note ».
Un utilisateur peut avoir plusieurs chantiers. Un chantier peut avoir plusieurs fournisseurs. Un fournisseur peut avoir participé à plusieurs chantiers. Un chantier peut avoir plusieurs chargés d’affaires (utilisateurs).
Il y a donc des tables de liaison.
Chaque table a une clef primaire auto-incrémentée, mais la table note a une clef primaire composée de 3 colonnes qui correspondent aux clefs primaires des 3 autres tables. Pourquoi ? parce qu’une seule note ne peut être attribuée au triptyque utilisateur/chantier/fournisseur (un utilisateur note un fournisseur d’un chantier).
Je n’ai trouvé que cette solution pour être sûr de n’avoir qu’une seule note mais cela me pose problème ! (vous vous en doutez bien)
Je n’arrive pas à lister les fournisseurs des différents chantiers d’un utilisateur que l’utilisateur n’a pas encore noté (donc qui n'ont pas encore de ligne dans la table "note").
Une âme charitable ? Une solution ? Merci !
Ci-dessous l’extrait de ma base et mon script PHP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?php session_start(); $pdo = pdo_connect_mysql(); // Vérifie si utilisateur connecté, sinon redirige vers page de connexion if(!isset($_SESSION['username'])){ header("Location: ../login.php"); } // liste des chantiers du $_session en tant que chargé d'affaire $stm0 = $pdo->prepare('SELECT Chantier_Id, Chantier_Nom, Fourn_Id, Fourn_Nom, Fourn_Ville, Contact_Id FROM fournisseur JOIN chantfourn ON Fourn_Id = Chantfourn_FournId JOIN chantier ON Chantier_Id = Chantfourn_ChantId JOIN chantcontact ON Chantier_Id = Chantcontact_ChantierId JOIN contact ON Chantcontact_ContactId = Contact_Id WHERE Contact_Username = ? ; $stm0->execute([$_SESSION['username']]); $chantfourncharg = $stm0->fetchALL(PDO::FETCH_ASSOC); ?>
Partager