|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour.
Je cherche à créer une association des commentaire aux messages. C'est un conseil que je demande. Est-il préférable d'associer un champ de la table commentaires à message ou inversément? Ma table des message : Code :
Genre à comment_id dans la 2e table et je mettrait le ID de message. J'ai besoin de vos idées sur cela. Je parle aussi du principe de créer un système pour faire des catégories.
__________________
|
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() |
Etant donné que tu peut avoir plusieurs commentaires pour un message, il est mieux de mettre ta clé étrangère dans la table commentaires
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Alors, je ferais comme ceci :
Le ID de la table messages irait à mon champ coment_id de ma table commentaires que voici : Code :
Et je créerait ma requête avec une jointure quelconque. Merci pour ce conseil. Bonne année
__________________
|
||
|
|
00
|
|
|
#4 | |||
|
Membre expérimenté
![]() |
Citation:
|
|||
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Je pense que je dois ajouter une référence dans la table des messages afin de pouvoir effacer les commentaires si j'éfface un message.
En détruisant un message qui porterais le ID 100 qui lui a comme commentaire les ID1, ID2, ID3 et ID6 Il faudrait que j'indique à message, les ID des commentaire? Parce que si je détruit un message, je ne veux pas que les commentaires associé reste.
__________________
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 728 ![]() |
Salut
Théoriquement il faudrait 3 tables pour représenter cette relation 1,n (une à plusieurs) qu'il y a entre la table "messages" et "commentaires". Les 3 tables : - "messages" : id_message comme clé primaire et auto_increment. - "commentaires" : id_commentaires comme clé primaire et auto_increment. - "commentaires_messages" : une clé double zone comme clé primaire, c'est à dire -> PRIMARY KEY (id_message, id_commentaire). Cette table n'aura alors que 2 champs, les couples d'IDs de messages et commentaires.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#7 | |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Comment j'appliquerais la 3e table en PHP?
Je sais à quoi sert messages et commentaires mais le dernier? Citation:
__________________
|
|
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : avril 2011 Messages : 426 ![]() |
Cela permet de savoir à quel message et rattacher le commentaire et vice versa.
|
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
J'ai fait avec deux table une requête et ça donne ceci en image.
En regardant l'image jointe, je me demande comment je vais appliquer la 3e table. Je comprends l'idée mais la manière d'appliquer la table en question.
__________________
|
|
|
00
|
|
|
#10 | ||||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 728 ![]() |
Tu ne peux pas appliquer le modèle qu'il y a dans cette image (linker), car sur celui-ci il y a une relation 1-1, et non 1,n, ce qui change tout.
En gros, un message pourra être lié à 1 et 1 seul commentaire. Pour qu'il y ait cette relation 1,n (et même 0,n), c'est à dire que pour 1 message avoir plusieurs commentaires, il faut une autre table comme je l'ai expliqué. Cette table aura uniquement 2 champs (couple id_message et id_commentaire), de même que la clé primaire sera aussi ces 2 champs (ou double clé en faite). Le fait de définir une clé double zone évitera d'avoir des doublons. Exemple de ce qu'on obtiendra. messages (uniquement des messaged, donc 1 clé primaire auto_increment) Code :
commentaires (la aussi uniquement des commentaires, donc 1 clé primaire auto_increment) Code :
commentaires_messages (les associations des commentaires des messages, une clé double) Code :
Donc dans cette exemple on a 3 messages (1, 2, 3) et 4 commentaires (1, 2, 3, 4). Le message 1 a 3 commentaires -> les 2, 1 et 4 Puis le message 2 a qu'un seul commentaire -> le 3 Et le message 3 n'a aucun commentaire
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||||||
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Le résultat de la requête dans mon image ne me permet pas d'afficher les commentaires pour chaque item.
Je vais me concentrer sur votre dernière explication. Merci pour vous être donné la peine de m'expliquer. Ça va servir. Je tente des choses et j'y reviens si j'y arrive pas. Ma requête vas se baser sur les trois tables surement.
__________________
|
|
|
00
|
|
|
#12 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 728 ![]() |
Citation:
Le modèles en 3 tables que je t'ai mis permets de faire un peu plus que d'associer des commentaires à un message. Ca permet d'avoir des messages sans commentaires, d'avoir aussi des commentaires non liés à des messages (on peu le voir comme un brouillon), et aussi (je dirais surtout) d'associer un même commentaire à plusieurs messages différents. Si ton besoin ne va pas aussi loin que ça, s'il est plus restrictif comme dire qu'un commentaire devra être lié un 1 et 1 seul message en particulier (et non à d'autres), alors effectivement ,il faudrait le faire avec 2 tables uniquement. Comme : "commentaires" Code :
J'avais peut être mal compris ce que tu voulais. Disons que maintenant tu as les 2 modèles.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#13 | ||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Effectivement, le modèle que je cherchais est :
Code :
Code :
http://www.intras.fr/tutoriels/mysql/mysql-jointure.php (je vais étudier ça en détails). Pour faire mes jointures ou pour déboguer, j'utilise navicat qui m'aide beaucoup à comprendre mais ça ne permet pas de tout comprendre. J'apprécie beaucoup votre aide RunCodePhp.
__________________
|
||||
|
|
00
|
|
|
#14 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 728 ![]() |
Citation:
A une époque (ça remonte pas mal maintenant), j'avais fais du MERISE, et ceci permet de concevoir ce genre de chose. On parle de MCD (Modèles Conceptuel de Données), de MPD (Modèle Physique de Données). Il y a des tutos d'ailleurs : http://sgbd.developpez.com/cours/ Cependant, du MERISE sans prof ou une personne pour guider/orienter, ça ne doit pas être évident. De mon coté, une fois les cours terminés, MERISE je l'ai mis au placard. ![]() Depuis je fais tout au feeling, mes besoins sont très loin d'être complexes.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Je vous trouve sympathique!
Je vais aller voir le tuto :-)
__________________
|
|
|
00
|
|
|
#16 | |
|
Membre expérimenté
![]() |
Citation:
![]() N’empêche je l'utilise toujours au taf, un petit MCD permet d'avoir une bonne visualisation de la BDD, très pratique pour la conception, mais aussi pour le développement
|
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
J'ai commencé à débloquer en utilisant Navicat pour les "jointures". Mais, il me manque encore pas mal de théories.
Ma principale préoccupation après le CRUD (create, read, update and delete) dans mysql. Ce sont les relations entre les catégories et les sous-catégories; c'est pour cette raison que j'ai créé ce poste. Je cherche pas à créer un script en tant que tel mais plutôt être en mesure d'en faire un.
__________________
|
|
|
00
|
|
|
#18 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 728 ![]() |
Citation:
Ca dépend là aussi de ce tu souhaite obtenir. En 1er je te mets un lien qui te seras peut être utile : Arborescence classique en au-jointure et arborescence intervallaire On peu voir dans ce tuto 2 façons de concevoir cela, le "classique" qui est le plus courant (plus simple), et "l'intervallaire" qui est assez rare (plus complexe). Si on regarde comment son conçus les Soft Open Source comme les CMS, blog, etc ... ils optent pour ce genre de solutions. A coté de ça, si on se tient à Merise de manière très stricte, on peu être amener à dire que la Bdd de ces Softs serait mal conçue (pour cette partie là du moins). Pour faire court, on va dire que selon le contexte (le Web, des besoins par moment particuliers, contraintes, optimisations, etc ...), fait qu'on ne peu pas toujours tout respecter à la lettre. Disons que Merise a été créé il y a pas mal de temps, et ne pouvait pas connaitre les besoins/contraintes actuels. Donc pour faire des menus (ou autres) avec une arborescences comme des catégories, sous catégories, sous sous catégories, voire au-delà et même à l'infini, il est bon de se baser sur des concepts connus. Je dirais donc que te référer à des Soft Open Source plus ou moins proches de ce que tu souhaites faire est un bon moyen de voir comment ils font, et ça permet aussi d'apprendre. Voire pourquoi pas en adopter un pour peu qu'il répond tout ou en parti à ton besoin.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#19 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Mysql ne permet pas de faire ressortir les messages une seule fois.
message1 - commentaire de A message1 - commentaire de B Chaque fois qu'un commentaire est émis, le même message est ajouté dans la liste. Sans les commentaires, j'ai 5 messages. Mais avec les commentaire si j'en ai 2, c'est comme si j'avais 7 message dont deux identique. Tout ça avec les jointures. Faut tricher avec PHP avec des Loop avec while et à l'intérieur d'autres loop pour faire ressortir un résultat. Mais, ça reste que le résultat de la requête n'est pas 5 ligne de message mais 7 lignes qui inclu les commentaires. Ce qui me faut c'est une requête qui me fait sortir 5 lignes de messages et soit que la requête me fait inclure les commentaire dans les bons message. J'essais juste de comprendre. J'ai essayé avec trois tables et on doit encore faire des jointures qui fabrique des lignes de plus pour inclure des commentaires. Et à l'affichage, j ai des ligne en double. Y'a pas un site qui donne un exemple déjà fait en démo? Mysql c'est puissant à ce qu'on dit. Merci pour les explications précédentes.
__________________
|
|
|
00
|
|
|
#20 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 728 ![]() |
Citation:
Poster le code de la requête est utile aussi pour qu'on vois mieux ce que tu fais. Si tu fais une requête qui sélection un message bien déterminer et ces commentaires associés, il est vrai qu'en faisant ça en 1 seul requête il va avoir un phénomène de répétition concernant les données du message. C'est aussi la même chose si on récupère plusieurs messages et les commentaires associés. Par ailleurs, on peu aussi le faire en 2 requêtes imbriquées ce qui au bout facilitera les choses. C'est théoriquement moins performant, mais faut voir si cela est si contraignant que ça ou pas. Citation:
Cependant on n'opte pas un modèle en 1 ou 2 tables juste pour espérer de simplifier les codes, on opte pour tel ou tel modèle car c'est les relations entre les données qui l'impose. Si tu obtiens plus de lignes que prévu alors c'est la requête SQL qui ne va pas. Poster la requête est plus simple (et poster la structure des tables au besoin). Citation:
Puis sur ce même forum php/mysql c'est pareil.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com