Je souhaite insérer le user_Id d'une table dans le parent_id d'une autre table, mais il n'y a pas de valeurs communes entre les deux tables.
P粉323224129
P粉323224129 2023-07-30 13:35:25
0
1
413
<p style="white-space:normal;">J'ai actuellement trois tables : </p><p style="white-space:normal;">table des utilisateurs//Les données sont insérées lors de l'inscription <pre class="brush:php;toolbar:false;">usersId //CLÉ PRIMAIRE nomutilisateur Nom d'utilisateur IDutilisateur e-mail mot de passe utilisateur dateHeure</pre> <p><code>parent</code> <pre class="brush:php;toolbar:false;">id //CLÉ PRIMAIRE ikB Nom ml mE-mail mTéléphone nom de famille fLnom fE-mail fTéléphone adresseL1 adresseL2 ville stateAbbr fermeture éclair créé à user_id //CLÉ ÉTRANGÈRE</pre> <p>J'ai utilisé la colonne email de la table users et mEmail ou fEmail pour insérer l'userId dans la table parents. </p> <p><code>Enfants</code> <pre class="brush:php;toolbar:false;">child_id //CLÉ PRIMAIRE enfant1Nom dobEnfant1 âgeEnfant1 enfant2Nom dobEnfant2 âgeEnfant2 enfant3Nom dobEnfant3 âgeEnfant3 enfant4Nom dobEnfant4 âgeEnfant4 nomenfant5 dobEnfant5 âgeEnfant5 enfant6Nom dobEnfant6 âgeEnfant6 enfant7Nom dobEnfant7 âgeEnfant7 enfant8Nom dobEnfant8 âgeEnfant8 enfant9Nom dobEnfant9 âgeEnfant9 enfant10Nom dobEnfant10 âgeEnfant10 parent_id //CLÉ ÉTRANGÈRE</pre> <p>Il n'y a pas de valeurs communes entre la table des enfants et les deux autres tables. Mon attente est de faire une validation entre la table des utilisateurs et la table parent, et si l'ID utilisateur de la table des utilisateurs et l'ID utilisateur de la table parent sont égaux, insérez cette valeur dans le parent_id de la table enfants. Est-ce possible? J'ai envisagé d'utiliser une jointure croisée, mais je crains que les performances ne diminuent à mesure que le nombre d'entrées dans la base de données augmente. </p> <pre class="brush:php;toolbar:false;">SELECT usersId FROM utilisateurs ; SELECT user_id FROM parent ; MISE À JOUR des enfants (parent_Id) INNER JOIN parent ON children.parent_id = users.usersId MISE À JOUR des enfants SELECT ID utilisateur DES utilisateurs cross JOIN children.parent_id ON users.usersId = children.parent_id MISE À JOUR des enfants Utilisateurs INNER JOIN (INNER JOIN parent SUR users.userId = parent.userId) SUR utilisateurs.usersId = parent.user_id SET children.parent_id = parent.user_Id;</pre> <p>J'ai essayé toutes les méthodes sans succès. J'ai aussi essayé de changer l'ordre des connexions mais cela n'a pas fonctionné non plus. Merci beaucoup pour toute aide que vous pouvez apporter. </p>
P粉323224129
P粉323224129

répondre à tous(1)
P粉596161915

En fonction de votre description, vous souhaitez mettre à jour la colonne parent_id dans la table enfant en fonction de la valeur correspondante entre la table utilisateur et la table parent. Vous souhaitez mettre à jour le parent_id dans la table enfant avec le usersId de la table users et le user_id de la table parent.

Vous pouvez le faire en utilisant la requête SQL suivante :


UPDATE Children c
SET c.parent_id = (
  SELECT p.user_id
  FROM users u
  JOIN parent p ON u.email = p.mEmail OR u.email = p.fEmail
  WHERE c.parent_id IS NULL -- Only update rows with NULL parent_id to avoid overwriting existing values
  LIMIT 1 -- Assuming you want to update one parent_id per child record; you may modify this as needed
);

Explication : 

  1. L'instruction UPDATE est utilisée pour mettre à jour la table Children, en l'appelant c.
  2. Nous utilisons une sous-requête pour trouver le user_id dans la table parent qui correspond à un email dans la table users (correspondant à mEmail ou fEmail).
  3. La condition JOIN rejoint les utilisateurs et les tables parents en fonction de la correspondance des e-mails.
  4. La clause WHERE garantit que nous mettons à jour uniquement les lignes de la table Children dont le parent_id est actuellement NULL (cela évite de les écraser si vous avez déjà inséré des ID parents).
  5. LIMIT 1 garantit que nous mettons à jour un parent_id par enregistrement enfant ; vous pouvez ajuster cette valeur si vous devez mettre à jour plusieurs enregistrements par enregistrement enfant.

Assurez-vous de sauvegarder votre base de données avant d'exécuter des requêtes de mise à jour, juste pour être sûr. ,

En ce qui concerne vos préoccupations concernant les performances à mesure que les entrées de la base de données augmentent, cette requête devrait être efficace tant qu'il existe des index appropriés sur les colonnes pertinentes, telles que email dans la table des utilisateurs et mEmail et fEmail dans la table parent. Les index accéléreront considérablement le processus de recherche, en particulier lorsque vous travaillez avec de grands ensembles de données.


Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal