Affectation enregistrement dans plusieurs catégories

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affectation enregistrement dans plusieurs catégories

par niuxe » 31 juil. 2009, 21:09

Ah oui oups. Erf code fait de tête...

Code : Tout sélectionner

CREATE TABLE annonce( id_annonce INT NOT NULL AUTO_INCREMENT PRIMARY KEY, annonce TEXT NOT NULL, /* etc. */ ) CREATE TABLE annonce_categorie( id_annonce_categorie INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_annonce INT NOT NULL, id_categorie INT NOT NULL, /* etc. */ FOREIGN KEY(id_annonce ) REFERENCES annonce(id_annonce), FOREIGN KEY(id_categorie) REFERENCES categorie(id_categorie) ) SELECT * FROM annonce AS a, annonce_categorie AS ac, categorie AS c WHERE a.id_annonce = ac.id_annonce AND ec.id_categorie = c.id_categorie #etc.
Je ne vois pas l'utilité de joindre à la table annonce l'identifiant annonce_categorie ? (enregistrement 7 ou 8 ou ...) ?

par fab » 31 juil. 2009, 18:50

Nolem, dans le schema que tu proposes je ne vois pas comment tu peux associer plusieurs catégories à une annonce!!!

Le champ "id_annonce_categorie" de la table "annonce_categorie" étant unique... Donc dans la table annonce tu stockeras une seule association "annonce<->catégorie" via le champ "id_annonce_categorie"

par niuxe » 30 juil. 2009, 16:52

Hello,

Je dirai plutôt que ce serait un truc dans ce goût là me semble t'il :

Code : Tout sélectionner

CREATE TABLE annonce( id_annonce INT NOT NULL AUTO_INCREMENT PRIMARY KEY, annonce TEXT NOT NULL, id_annonce_categorie INT NOT NULL, /* etc. */ FOREIGN KEY(id_annonce_categorie) REFERENCES annonce_categorie(id_annonce_categorie) ) CREATE TABLE annonce_categorie( id_annonce_categorie INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_categorie INT NOT NULL, /* etc. */ FOREIGN KEY(id_categorie) REFERENCES categorie(id_categorie) ) CREATE TABLE categorie( id_categorie INT NOT NULL AUTO_INCREMENT PRIMARY KEY, categorie VARCHAR(64) NOT NULL, /* etc. */ ) SELECT a.annonce, c.categorie FROM annonce AS a, annonce_categorie AS ac, categorie AS c WHERE a.id_annonce_categorie = ac.id_annonce_categorie AND ac.id_categorie = c.id_categorie AND c.categorie = 'une catégorie' OR c.categorie = 'une autre catégorie'
Code fait de tête. Je peux m'être trompé.

++

par fab » 30 juil. 2009, 16:22

Bonjour,

Dans ce genre de cas il faut faire une table intermédiaire qui sera en charge de stocker l'association entre tes enregistrements, ici visiblement ce sotn des annonces et les catégories.
Donc tu dois faire une table avec 3 champs, 1 identifiant unique( qui sera l'identifiant de l'association entre annonce et catégorie dans le cas ou tu voudrais supprimer ou modifier cette association ), l'identifiant de l'annonce ainsi que l'enregistrement de la catégorie

Ainsi quand tu affiches une annonce pour avoir la liste des catégories correspondantes tu fais une requête sur cette table avec l'identifiant de l'annonce dans ton WHERE et tu obtiendras avec la bonne jointure la liste des catégories.
Pour afficher la liste des catégories c'est pareil mais dans l'autre sens avec dans le WHERE l'identifiant de la catégorie

C'est la manière la plus propre de procéder :)

Affectation enregistrement dans plusieurs catégories

par bibo » 30 juil. 2009, 14:19

Bonjour,

Je suis en train de réaliser une petite application qui permet de faire des annonces.

Ces annonces pourront être intégrées dans plusieurs catégories.

Le formulaire d'enregistrement d'une annonce contiendra une liste multiple (annonce[]) qui permettra de choisir plusieurs catégories. Lors de l'insertion, je compte intégrer cette information dans un champ unique (les catégories étant séparées par des ,). Par exemple : 1,5,9 voudrait dire que l'annonce apparaîtra dans les catégories 1, 5 et 9.

Lorsque je fais un affichage, je suis obligé de faire une jointure avec la table "catégories" : ...WHERE idcat.annonce=idcat.categories. Ca ne pose pas de problème si une annonce n'avait qu'une catégorie, mais dans mon cas une annonce peut être contenu dans N catégories. Et là je bloque complètement pour la jointure vu que le champ ressemble à 1,5,9...etc

Suis-je sur le bon chemin ? Ou il est préférable de s'y prendre autrement ?

Merci beaucoup pour votre aide !