IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème d'organisation : plusieurs valeurs dans un champs mysql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut Problème d'organisation : plusieurs valeurs dans un champs mysql
    Hello,

    Pour faire simple, voilà un exemple :

    J'ai une table user, dans cette table user, j'ai des champs classiques (login, password, groupe, etc..).

    J'ai une autre table, la table groupe. Dans cette table, j'ai déclaré les groupes suivants (dans un champs groupe_name admettons : user, modo,admin,redacteur, etc..

    si je veux déclarer un nouvel utilisateur, je remplis tous les champs et mon super script va aller lister le contenu de la table groupe, et là, je choisi le groupe dans lequel rajouter mon user. Très bien, ça marche.

    Par contre, si je veux que mon user appartiennent à plusieurs groupes, je fais comment ? je veux dire, d'un point de vue mysql ??

    Dans le champs groupe de la table user, je peux mettre plusieurs variables ? genre "user; redacteur" etc.. ? Ou il ne faut qu'une variable par champs et dans ce cas, comment je pourrais contourner ce problème ?

    J'ai ce souci pour cet exemple là, mais il se trouve que dans d'autres tables, pour d'autres variables je rencontre ce même problème d'organisation.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Tu dois utiliser une table d'association pour liéer les 2 tables groupe et user.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,
    Tu dois utiliser une table d'association pour liéer les 2 tables groupe et user.
    J'ai relu mon premier message et j'ai apporté des corrections (c'était pas très clair), du coup je ne suis pas sûre que tu ai exactement répondu à ce que je cherche.

    quoi qu'il en soit, si c'est bien ça, tu pourrais m'en dire plus ? en prenant mon exemple par exemple.

    /edit : après moulte réflexion, je viens d'avoir une idée, mais ça ne me semble un peu tordu

    Il s'agirait de créer une table choixgroupe dans laquelle j'aurais :

    user_id
    groupe_id

    Et à chaque fois que je veux rajouter un user dans un groupe, je créée un enregistrement du genre :

    alfred
    user

    ensuite,

    alfred
    redacteur

    etc..

    Cette table contiendrait en fait l'ensemble des appartenances user/groupes.

    Mais ça me paraît quand même vachement lourd.. Que vaut cette solution ?

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Les structures des tables doivent être un peu comme ça:

    user(login,password,...);
    groupe(groupeID,groupe_name);
    userGroupe(login,groupeId);

  5. #5
    Membre éclairé Avatar de s.lennon
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    Bonjour.

    ça peut paraître lourd, mais c'est l'unique solution pour un lien "n-n" (un groupe contient plusieurs utilisateurs, un utilisateur appartient à plusieurs groupes). A chaque fois tu dois créer cette table "intermédiaire" qui contient les deux identifiants.

    Tu peux regarder ce cours sur la modélisation :
    http://laurent-audibert.developpez.c...rs-UML017.html

    Bonne journée.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Par défaut
    Rah oui, merci.

    Je voudrais votre avis quand même au niveau de la rapidité de tout ça. A présent, je vais prendre un véritable exemple, et je suis en train de me poser la question de la lourdeur des requêtes.

    Ce que je veux faire : un simple indexeur de petites annonces.

    Pour ce faire, là j'ai 3 tables, dans ces tables, il y a des champs qui commencent par EXT_ , il s'agit de champs qui vont piocher dans une autre table : Par exemple dans tbl_users, le champs EXT_user_localisation_id va en réalité taper dans localisation_id qui est un champs de la table tbl_localisation.

    Voici une partie de mon dico :

    tbl_annonces
    Commentaires sur la table: gestion des petites annonces

    Champ Type Null Défaut Commentaires
    annonce_id int(6) Oui NULL
    EXT_annonce_user_id int(6) Oui NULL
    annonce_titre varchar(300) Oui NULL
    annonce_contenu varchar(10000) Oui NULL
    annonce_date_creation datetime Oui NULL
    annonce_date_modification datetime Oui NULL
    tbl_localisation
    Commentaires sur la table: correspondance ville / codes postaux

    Champ Type Null Défaut Commentaires
    localisation_id int(5) Oui NULL
    localisation_ville_name varchar(30) Oui NULL
    localisation_ville_cp varchar(6) Oui NULL
    localisation_ville_departement varchar(30) Oui NULL
    localisation_ville_insee int(6) Oui NULL
    tbl_users
    Commentaires sur la table: Table user, password, date de création

    Champ Type Null Défaut Commentaires
    user_id int(6) Oui NULL
    user_login varchar(30) Oui NULL
    user_password varchar(20) Oui NULL
    user_creation_date datetime Oui NULL
    user_modification_date datetime Oui NULL
    user_desactivation_date datetime Oui NULL
    EXT_user_localisation_id int(6) Oui NULL
    user_mail varchar(60) Oui NULL
    user_validation_code varchar(32) Oui NULL
    user_activation int(1) Oui NULL
    user_mod_id int(2) Oui NULL
    Ma question est la suivante : N'est-ce pas trop lourd si je veux lister les annonces et dans ce listing faire ressortir par exemple le code postal du propriétaire de chaque annonce ?

    Parcequ'il y aurait une requete qui irait chercher le user id du propriétaire de l'annonce, et par rapport à ce user_id, elle irait ensuite chercher l'id de la localisation du propriétaire et de là elle ressortirait le code postale.

    Ça me parait un peu lourd comme requête vous trouvez pas ? Est-ce Mysql saura gérer ça sans trop tousser ou il vaudrait mieux que je mette le code postal de l'annonce directement en dur dans l'annonce elle même (plus rapide, mais moins propre à mon sens..) ?

Discussions similaires

  1. regrouper plusieurs valeurs dans un champs
    Par remyc42 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 30/08/2012, 12h01
  2. [MySQL] Inserer plusieurs valeurs dans meme champs SQL
    Par chris52 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 19/04/2012, 16h56
  3. [Normalisation] Plusieurs valeurs dans un champ
    Par Sh4dow49 dans le forum Schéma
    Réponses: 16
    Dernier message: 30/05/2008, 15h30
  4. Plusieurs valeurs dans un champ
    Par Freyskeyd dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/12/2007, 21h03
  5. récupérer plusieurs valeurs dans un champ hidden
    Par karimphp dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2006, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo