MySQL - Comment insérer dans une table qui a une relation plusieurs-à-plusieurs
J'ai une table de personnes. Chaque personne a droit à la propriété et de nombreuses personnes peuvent avoir une certaine propriété. C'est donc un plusieurs-à-plusieurs relations. C'est le schéma:
CREATE TABLE persons (
person_id int(11) NOT NULL AUTO_INCREMENT,
firstname varchar(30) NOT NULL,
lastname varchar(30) NOT NULL,
PRIMARY KEY (person_id)
);
CREATE TABLE properties (
property_id int(11) NOT NULL AUTO_INCREMENT,
property varchar(254) NOT NULL UNIQUE,
PRIMARY KEY (property_id)
);
CREATE TABLE has_property (
person_id int(11) NOT NULL,
property_id int(11) NOT NULL,
PRIMARY KEY (person_id,property_id),
FOREIGN KEY (person_id) REFERENCES persons (person_id),
FOREIGN KEY (property_id) REFERENCES properties (property_id)
);
Maintenant, disons que je veux insérer à la base de données de cette personne:
- prenom:'John'
- nom:'Doe'
- propriétés:'property_A','property_B','property_C'
personnes
+-----------+-----------+----------+
| person_id | firstname | lastname |
+-----------+-----------+----------+
| 1 | John | Doe |
+-----------+-----------+----------+
propriétés
+-------------+------------+
| property_id | property |
+-------------+------------+
| 1 | property_A |
| 2 | property_B |
| 3 | property_C |
+-------------+------------+
has_property
+-----------+-------------+
| person_id | property_id |
+-----------+-------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-----------+-------------+
Jusqu'à présent, la meilleure chose que j'ai pensée est de le faire régulièrement un insert dans la table de personnes:
INSERT INTO persons (firstname,lastname) VALUES ('John','Doe');
et puis faire un select pour trouver l'id de la personne j'ai juste inséré
SELECT person_id FROM persons WHERE firstname='John' AND lastname='Doe';
afin de les insérer dans les deux autres tables (parce que j'ai besoin de savoir le person_id).
Mais je pense qu'il doit y avoir une meilleure façon, n'est-ce pas?
source d'informationauteur Christos Baziotis | 2013-10-31
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'ai fait. J'espère que cela aide quelqu'un.