Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question/Aide Jointure

créer une équivalence de valeur entre deux tables ?

7 novembre 2017 à 16:10:20

Bonjour à tous !

Voici mon problème j'ai deux tables :

- la table1 correspond aux infos fournies lors de l’inscription d'un utilisateur et comporte un ID(auto_inc), nom, mdp et mail.

- la table2 des informations complémentaires qui sont remplies après l'inscription comme l'adresse, le pays, et autre...

j'aimerais pouvoir lier les deux tables entre elles alors je créer un nouveau champs dans ma table 2 qui s'appelle user_ID et je voudrais que sa valeur soit équivalante à table1.ID est ce que c'est possible ?

Autre solution je recréer un champs nom dans table2 qui équivaut à mon $_SESSION['nom'], de cette manière je peux faire une jointure plus simplement, or je n'arrive pas trop à savoir comment faire pour vérifier que ma jointure à fonctionner (je n'ai pas de message d'erreur en tout cas...)

req = $bdd->prepare('SELECT * FROM account
        INNER JOIN profile
        WHERE table1.nom = table2.nom');

Je pense pas qu'il y ai d'erreur particulière ici n'est ce pas ?

Désolé si c'est un peu confus mais je m'y perds un peu dans ces jointures.

  • Partager sur Facebook
  • Partager sur Twitter
7 novembre 2017 à 16:50:19

Bonjour,

A priori la deuxième table paraît inutile, à moins que la même adresse soit potentiellement réutilisée de manière régulière.

Pour le reste, non, on ne joint pas sur un nom, mais sur l'id, pour des raison évidentes d'indexation et donc de performances.

  • Partager sur Facebook
  • Partager sur Twitter
7 novembre 2017 à 17:15:34

Même si parmis les noms il n'y a pas de doublons possible ?

Je pense que la jointure est utile dans la mesure où je veux permettre à un utilisateur de pouvoir accéder au profil d'un autre utilisateur et de pouvoir y consulter les différentes infos qui sont dans la table2.

Et je ne vois que la jointure comme possibilité.

Pour joindre sur l'ID de table1 je dois donc créé un table2.id qui prend la valeur de table1.id c'est juste ?

Comment attribuer à table2.id la valeur de table1.id ? Ah et comment afficher un résultat de cette jointure pour voir si ça a fonctionné ?

Merci

-
Edité par TruffierAxel 7 novembre 2017 à 17:16:07

  • Partager sur Facebook
  • Partager sur Twitter
7 novembre 2017 à 19:50:42

Pourquoi ne pas simplement utiliser une seule table, avec toutes les infos, c'est ce que je voulais dire.

Après, tout dépend comment l'enrichissement de la table se fait, mais en général, il faut bien choisir un utilisateur pour lui enregistrer une adresse.

  • Partager sur Facebook
  • Partager sur Twitter
8 novembre 2017 à 8:56:26

Bonjour,

philodick a écrit:

Pourquoi ne pas simplement utiliser une seule table, avec toutes les infos

Dans le cadre de la normalisation, si les informations complémentaires ne sont pas systématiquement saisies, il est préférable de créer une deuxième table pour les contenir plutôt que d'avoir des colonnes NULL dans la première tant que ces données ne sont pas saisies ...

Si toutes les données ont vocations à être renseignées, alors en effet autant préférer une seule table ...

TruffierAxel a écrit:

je créer un nouveau champs dans ma table 2 qui s'appelle user_ID et je voudrais que sa valeur soit équivalante à table1.ID est ce que c'est possible ?

Le modèle de données "normal" serait :

  • utilisateur ( id_utilisateur [pk], nom, email, password, etc. )
  • complement ( id_utilisateur [pk][fk], info1, info2, etc. )

Dans la table utilisateur tu stockes toutes les données obligatoirement saisies lors de l'inscription.

Dans la table complement tu stockes toutes les données facultatives saisies plus tard, que tu relies à la table utilisateur par l'id (clé primaire) de cette table.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
8 novembre 2017 à 15:36:31

Exactement,

Hormis les informations d'inscriptions les autres champs ne sont pas obligatoires et j'imagine que tout le monde ne les rempliras pas tous c'est pour ça que je veut faire une deuxième table.

Benzouye j'ai compris le modèle et je viens de reussir à faire un table complement qui se créée ou s'update en fonction de si l'id.complement correspond à une ID dans utilisateur ;) Petite question est ce que id.complement doit être primaire ou s'est indifférent ?

  • Partager sur Facebook
  • Partager sur Twitter
8 novembre 2017 à 16:01:09

TruffierAxel a écrit:

est ce que id.complement doit être primaire ou s'est indifférent ?

Si un utilisateur peut avoir plusieurs compléments alors non, pas besoin. Si un utilisateur n'a qu'un seul complément alors oui, clé primaire.
  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
8 novembre 2017 à 16:24:34

Ah il risque d'en avoir plusieurs... cf le nouveau poste que je viens d'ouvrir : https://openclassrooms.com/forum/sujet/checkbox-a-choix-multiples-gestion-traitement-sql

Peut être que d'ailleurs tu as une idée meilleure et je n'ai pas besoin de créer une table supplémentaire ?

  • Partager sur Facebook
  • Partager sur Twitter