sql插入一堆具有层次结构的记录

时间:2012-06-03 08:40:24

标签: php mysql insert

让我们有一个PHP方法,每次调用时都应该在MySQL数据库中插入几行。不幸的是,这些记录代表了一个层次结构,我想通过为每个级别添加一个密钥来保持这个层次结构。一个例子可能是这样的:

id    hier_key_1    hier_key_2    value
0     0             0             val1
1     0             0             val2
2     1             0             val3
3     1             0             val4
4     2             1             val5
5     2             1             val6

我目前的解决方案是这样的:

  1. 在hier_key_1表中插入新记录
  2. 选择此记录的自动递增ID
  3. 在hier_key_2表中插入新记录
  4. 选择此记录的自动递增ID
  5. 在表格中插入包含所有值的记录,并将hier_key_1和hier_key_2作为指向其表格的外键插入
  6. 有没有办法简化这一点,即insert方法是否提供任何类型的返回值,包括插入数据的键?或者我应该尝试在PHP方法中生成唯一键并在之后检查重复项吗?

2 个答案:

答案 0 :(得分:2)

是的,有:

PHP:

$query = "INSERT INTO hier_key_1(hier_key_1) VALUES (0)"); 
if( !mysql_query($query) ) 
{/*insert failed*/} 

$id_key_1 = mysql_insert_id();

//... and so on... 

MYSQL - SQL

INSERT INTO hier_key_1(hier_key_1) VALUES (0); SET @id_key_1 =
LAST_INSERT_ID();

INSERT INTO hier_key_2(hier_key_2) VALUES (0); SET @id_key_2 =
LAST_INSERT_ID();

INSERT INTO table_name(id, hier_key_1, hier_key_1,value) VALUES (0,
@id_key_1,@id_key_2,value1);

依旧......

问候

答案 1 :(得分:0)

我只需在表格中添加一个额外的字段来定义层次结构:

id |   parent_id | value
 0 |        NULL | val1
 1 |        NULL | val2
 2 |           1 | val2-1
 3 |           1 | val2-2

任何行的parent_id都指向其父级的id;最高级别项的parent_id的值为NULL