2012-09-27 7 views
1

J'ai regardé les autres questions sur SO et je n'arrive pas à comprendre comment cela fonctionne. Je construis un magasin en ligne d'armes à feu qui permettra de cataloguer les armes à feu et les articles connexes. Il y a deux problèmes que je vais avoir -Comment insérer des données dans plusieurs tables

Problème 1

Dans ce problème, j'ai une forme de AJOUTZ où le produit est divisé en deux parties; le premier est ATTRIBUTS PRIMAIRES et le second est ATTRIBUTS SECONDAIRES. Voici un SS de la forme de test:

enter image description here

Un exemple serait des armes à feu ont huit variations différentes de ce modèle. Il peut différer en longueur de canon, style de stock, taille de calibre de balle, et d'autres caractéristiques. Donc, je vais afficher les ATTRIBUTS PRIMAIRES en haut de la page et dans un tableau, je vais énumérer tous les sous-modèles qui énumèrent les ATTRIBUTS SECONDAIRES.

Les ATTRIBUTS PRIMAIRES sont des attributs que tous les produits de cette catégorie auront définitivement. Les ATTRIBUTS SECONDAIRES sont des attributs que certains produits auront. Donc, lorsque le formulaire est rempli et soumis, je veux que les données à insérer dans tous les tableaux en un seul coup. Voici mes tableaux:

enter image description here

Problème 2

La façon dont ma table secondaire ATTRIBUTES est créé, je peux ajouter un attribut à la fois. Dans la capture d'écran ci-dessus, il y a huit ATTRIBUTS SECONDAIRES, est-ce que je créerais une boucle qui bouclera huit fois l'insertion de données à chaque fois? J'espère que cela a du sens, sinon je vais entrer dans plus de détails.

Remarque, j'utilise PHP/MySQL.

EDIT

Je pris les conseils de tout le monde et a essayé de concevoir ma base de données en utilisant les suggestions. S'il vous plaît jeter un oeil et voir si ce que j'ai fait est quelque chose qui fonctionnerait efficacement. J'apprends le concept simple d'un-> un, un-> beaucoup, beaucoup-> beaucoup, et etc ... La seule chose que j'ai vu qui pourrait être un-> un est le produit au fabricant. Est-ce que cela semble correct? J'ai passé beaucoup de temps à essayer de faire de son mieux et j'apprécie le feedback/la critique de tout le monde. Ci-dessous mon nouveau schéma:

enter image description here

Merci,

+0

X * les instructions * séparées * sont correctes. Assurez-vous de * utiliser les transactions * (c'est-à-dire, utilisez un vrai moteur de table de base de données et n'utilisez pas la validation automatique). –

+0

Hey pst, y a-t-il une façon de rédiger un exemple rapide? Je suis un apprenti visuel avec ce genre de choses. – Mike

+0

SO fonctionne mieux le * autre * façon :-) Commencez avec la tâche, insérez 8 attributs ... puis écrivez du code qui fait exactement cela. 8 inserts séparés; dans une boucle et/ou en appelant simplement une fonction pour faire abstraction de tout le code en double. Est-ce que ça marche? Si non, pourquoi pas? Toute préoccupation? (Ensuite, les réponses peuvent se concentrer sur des détails spécifiques et/ou offrir des alternatives utiles.) –

Répondre

3
  1. Vous ne pouvez pas insérer dans plusieurs tables dans "one shot", mais vous pouvez faire la meilleure chose: traiter les insertions dans le cadre d'une transaction unique, de sorte que si quelque chose ne va pas, quelle que soit la partie du travail qui a été faite, elle sera annulée.

  2. Il est possible pour une seule instruction pour insérer plusieurs enregistrements: http://www.electrictoolbox.com/mysql-insert-multiple-records/

+0

merci pour le lien, il était utile de voir les différentes variations. Comme pour 1. Je vais utiliser PDO et exécuter plusieurs insertions dans le cadre d'une seule transaction. Merci :) – Mike

2

MySQL prend en charge les insertions multiples lignes:

INSERT INTO table 
(col1, col2) 
VALUES 
(1, 'blah'), 
(2, 'foo'), 
(3, 'foobar') 

Vous pouvez également utiliser MySQLi ou AOP, utiliser le paramètre de liaison, Préparez votre insertion, puis exécutez plusieurs fois (http://us3.php.net/manual/fr/mysqli.prepare.php)

+0

@ bobwienholt J'utilise PDO donc je vais chercher de la documentation. – Mike

Questions connexes