Page 1 sur 1
Besoin conseil méthode
Posté : 15 avr. 2006, 22:47
par jpsartre
Bonjour,
J'ai une table événements et une table abonnés.
J'ai fait un espace protégé par session pour les abonnés. Je voudrais qu'ils puissent stocker les événements dans un panier.
Comme je stocke le pseudo dans la session, je veux faire une autre table dans laquelle je mets le pseudo et l'id de l'événement, je me disais que je n'aurai plus qu'à faire une requête pour afficher la liste des événements correspondants à ce pseudo.
Mais comment afficher, une liste avec le détail des événements, comment faire pour qu'à partir de la liste des id des événements je puisse afficher les enregistrement de ma table événement (pour avoir le détail).
Merci pour votre aide
Posté : 15 avr. 2006, 23:22
par Ultiny
Je pense que l'ID de l'évenement ne sert a rien et ne fait que compliquer ton système.
Tu devrai laisser MySQL attribuer un ID automatiquement incrémenté.
Ensuite tu pourra afficher avec un simple SELECT la liste des evenements WHERE user='nom_d_utilisateur'
Ceci t'aide?
Posté : 15 avr. 2006, 23:41
par jpsartre
Bnjour,
Pas vraiment mais j'ai dû mal m'expliquer.
J'ai bien l'id de ma table événements incrémenté par mysql.
En fait, je voulais afficher la liste des événements.
Comme l'utilisateur navigue sous session, j'ai son pseudo.
Je voulais donc qu'il stocke les événements choisis dans une nouvelle table.
Cette table devrait contenir l'id de l'événement et le pseudo.
Donc je peux afficher la liste : id événement + pseudo.
Jusque là pas de pb.
Mais comment lier les tables pour afficher le détail des événements au lieu de son seul id, c'est à dire que je voudrais afficher la liste des événements stockés par l'utilisateur.
Je crois que je du mal à être clair ce soir
Merci de votre aide
Posté : 15 avr. 2006, 23:47
par Cyrano
À vue de nez, c'est un problème de modélisation.
Si à un individu peuvent correspondre plusieurs évènements, et si dans le même temps un évènement peuvent correspondre plusieurs individus, alors il faut entre ta table "individus" et ta table "evenements" une table de relation qui aura deux champs : d'une part la clé primaire de l'individu, d'autre part la clé primaire de l'évènement : ces deux clés étrangères formeront en outre une clé primaire.
Tu retrouveras donc facilement tous les évènements liés à un individu précis et inversement avec une simple jointure.
Posté : 16 avr. 2006, 00:14
par jpsartre
Merci,
C'est exactement ce que j'essayais d'expliquer.
J'ai donc ma table avec mes trois champs
id auto_incrémenté, id événement, id abonné
Tu me dis de joindre les tables. A quoi cela ressemble-t-il?
Franchement j'ai du mal à me représenter la chose.
Je ne vois pas à quoi ressemble une requête qui me sortirait les enregistrements de la table événements à partir de ma table à trois champs.
Je vais chercher des explications sur "jointure",
Merci encore
Posté : 16 avr. 2006, 00:21
par Ultiny
Moi j'aurais pas fait comme ça, mais c'est bien mieu comme tu le propose
Cyrano, je suis encore noob sur MySQL, j'en suis même pas à la moitier de mon bouquin sur MySQL5
Moi je voyais ça sans jointures, avec une seule table, donc bien remplie

Posté : 16 avr. 2006, 02:05
par Truc
Je ne vois pas à quoi ressemble une requête qui me sortirait les enregistrements de la table événements à partir de ma table à trois champs.
Un exemple de modélisation
ICI.
Ensuite suffit de parcourir la table intermédiaire avec l'id d'un événement pour retrouver les pseudos associées ou inversement, parcourir avec un id de pseudo pour retrouver tous les événements associés au pseudo.
Posté : 16 avr. 2006, 02:14
par jpsartre
Merci,
Je vais essayer de voir ça, je viens de faire une requête qui ne marchait pas. Je vais recommencer.
++
Posté : 16 avr. 2006, 09:25
par Cyrano
Bon, il parait qu'une image vaut mille mots, exemple plus parlant :
Code : Tout sélectionner
Table Relation Table
+------------------+ +-----------------+ +-------------------+
| table membre | | table memevt | | table evenement |
+------------+-----+ +-------+---------+ +-------------+-----+
| Champ | Cle | | Champ | Cle | | Champ | Cle |
+------------+-----+ +-------+---------+ +-------------+-----+
| mem_id | PRI |-----------|mem_id | ETR PRI |-----------| evt_id | PRI |
| mem_prenom | | |evt_id | ETR PRI | | evt_date | |
| mem_nom | | +-------+---------+ | evt_libelle | |
+------------+-----+ +-------------+-----+
La recherche des évènements sur un membre particulier :
Code : Tout sélectionner
SELECT e.evt_date, e.evt_libelle
FROM membre AS m, evenement AS e, relation AS r
WHERE m.mem_id = 1234
AND m.mem_id = r.mem_id
AND r.evt_id = e.evt_id;
La recherche des membres concernés par un évènement précis
Code : Tout sélectionner
SELECT m.mem_nom, m.mem_prenom
FROM membre AS m, evenement AS e, relation AS r
WHERE e.evt_id = 4567
AND e.evt_id = r.evt_id;
AND r.mem_id = m.mem_id;
Je crois que ça se passe de commentaires superflus, l'illustration devrait t'éclairer pas mal...

Posté : 16 avr. 2006, 12:23
par jpsartre
Merci beaucoup,
J'avais fait comme ça :
$query = "SELECT * FROM panier,evenements WHERE panier.ref=evenements.ref AND pseudo= '".$_SESSION['pseudo']."' ORDER BY dd DESC";
Je ne connaissais pas le AS, enfin je l'avais déjà vu mais je ne comprenais pas, là je crois avoir compris.
Je vais essayer avec ta requête, elle est plus parlante et manipulable.
++
Posté : 16 avr. 2006, 12:51
par Truc
Bon, il parait qu'une image vaut mille mots, exemple plus parlant :
Ben euh j'ai filé un lien vers un exemple en (pseudo) image, mais bon c'est vrai que j'ai pas fait de présentation tableau
Je ne connaissais pas le AS, enfin je l'avais déjà vu mais je ne comprenais pas, là je crois avoir compris.
Le 'as' permet d'utiliser un alias pour un champ ou une table pour éviter dutiliser le nom complet (qui peut être long) plusieurs fois dans la même requete.
Dans la requête de Cyrano l'alias est faite sur les tables, par exemple "membre AS m" puis utilisation de "m.mem_id" au lieu de "membre.mem_id"