0 votes

Copier les informations sélectionnées de plusieurs tables sans utiliser beaucoup de requêtes?

Je suis en train d'utiliser php et mysql pour une page web, et je veux réutiliser des informations que j'ai dans trois tables de base de données, similaire à une opération 'enregistrer sous'.

Les tables sont liées comme une structure 1 à plusieurs puis 1 à plusieurs, une structure arborescente.

Jusqu'à présent, je l'ai implémenté en aplatissant la structure arborescente avec php (similaire à une seule table géante) et en la stockant dans un tableau. Ensuite, j'ai parcouru chaque ligne, et même chaque partie de la ligne, et pour chacune, je l'ai insérée dans la table correspondante avec une requête. Cela fonctionne en quelque sorte, mais avec beaucoup de code pour vérifier si chaque publication possède même les informations de la troisième table (cela pourrait être vide).

Maintenant, ma question est, cela pourrait-il être implémenté de manière plus efficace? Il pourrait y avoir beaucoup de requêtes à la base de données de cette manière.

Le problème ici semble être comment lier les nouvelles publications. J'ai regardé 'SELECT INTO', mais comme j'ai besoin de lier les nouvelles clés, je ne vois pas comment cela pourrait fonctionner. De plus, mysql_insert_id ne me donne que le dernier identifiant, pas tous.

0voto

Pekka 웃 Points 249607

La méthode habituellement la plus rapide et la plus élégante pour dupliquer une ligne que je connais est :

Dupliquer la ligne :

INSERT INTO tablename SELECT * FROM tablename WHERE id = 1;

interroger l'ID de la nouvelle enregistrement :

SELECT LAST_INSERT_ID() AS lastID;  

Stocker cet ID dans une variable PHP (non montrée ici) et ensuite mettre à jour la clé dans les tables dépendantes :

UPDATE related_table_name SET key = '$lastID'

(id doit être une colonne à auto-incrémentation pour que cela fonctionne, et LAST_INSERT_ID() doit être utilisé immédiatement après l'insertion.)

Référence :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X