Clé étrangère avec phpmyadmin

Résolu/Fermé
tybmhi Messages postés 200 Date d'inscription dimanche 13 juillet 2008 Statut Membre Dernière intervention 18 septembre 2017 - 5 août 2008 à 19:12
 suzana - 7 mai 2012 à 00:18
Bonjour,

Voilà mon problème : J'ai crée une table nommé "post" ( champs: id Pseudo Lyrics) qui enregistre les messages postés par les internautes.

Sur une page php je fais apparaitre tous les messages dans la base de données en faisant une boucle avec la fonction "while". Jusque là tous va bien.

J'ai envie de rajouter un système de commentaire à chacun de ces messages.
J'ai donc créer une nouvelle table nommé "commentpost" (champ : id pseudo message )

Pour l'instant la seule que je suis arrivé a faire se répète pour tous les message (certainement à cause de la boucle)
Je voudrais donc savoir comment faire pour lier uniquement chaque message du commentaire au message poster par l'internaute. J'ai entendu parle de clé étrangère, de fonction "left join" etc... mais je suis débutant en la matière et je ne sait vraiment pas comment faire.

Merci d'avance

8 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 326
5 août 2008 à 23:13
Bonsoir,
Il faut que tu rajoutes un champ à ta table de commentaire pour spécifier à quel post le commentaire se réfère. C'est ça la notion de foreign key.

Pour la création, avec MySQL tu vas donc avoir un truc semblable à :
CREATE TABLE posts
(id INT NOT NULL,
INDEX(id),
pseudo VARCHAR(32),
lyrics VARCHAR(30000),
PRIMARY KEY(id)
)TYPE=INNODB;

CREATE TABLE comments
(id INT NOT NULL,
pseudo VARCHAR(32),
message VARCHAR(3000)
post_id INT NOT NULL,
INDEX(post_id),
PRIMARY KEY(id),
FOREIGN KEY(post_id) REFERENCES posts(id) ON DELETE CASCADE)
TYPE=INNODB;

Evidemment ce script est à adapter en fonction de tes besoins (ALTER TABLE si tes tables existent déjà...).

En ce qui concerne la requête sql, pour sélectionner tous les commentaires d'un post, tu pourras faire :
select id, pseudo, message from comments where post_id=post

post est donc l'identifiant du post. Pas besoin de jointure ici, c'est pas encore très compliqué.

Cordialement.
8