2010-06-12 3 views
0

que je dois faire quelque chose comme çainserts complexes

insert into object (name, value, first_node) values ('some_name', 123, 0) 
@id = mysql_last_insert_id() 
insert nodes (name, object_id) values ('node_name',@id) 
@id2 = mysql_last_insert_id() 
update object set [email protected] where [email protected] 

Est-il possible de le rendre plus simple? Que faire si je veux insérer plus de paires (objet, noeud) avec une efficacité raisonnable?

+0

Qu'est-ce qui est si compliqué à ce sujet? –

Répondre

0

Vous devez utiliser une troisième table pour rendre vos relations:

  • OBJET (ID, nom, valeur)
  • nodes (ID, NOM)
  • OBJ_NOD (NODE, OBJET)

Vous pouvez faire des insertions de cette façon:

insert into object (name, value) values ('some_name', 123) 
@oid = mysql_last_insert_id() 
insert nodes (name) values ('node_name') 
@nid = mysql_last_insert_id() 
insert obj_node (node,object) values (@nid, @oid) 

Vous pouvez ensuite utiliser des jointures pour obtenir le nœud pour un objet particulier (ou des objets pour un nœud):

SELECT O.ID AS OID, O.NAME AS ONAME, O.VALUE, N.NAME AS NNAME, N.ID AS NID 
FROM OBJECT AS O 
JOIN OBJ_NOD ON OBJ_NOD.OBJECT = O.ID 
JOIN NODES AS N ON N.ID = OBJ_NOD.NODE 
WHERE O.ID = @object_id; —- or 'N.ID = @node_id' if you want to get elements from a node id