0

假设有一个 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 作为指向其表的外键

有没有办法简化这一点,即插入方法是否提供任何类型的返回值,包括插入数据的键?或者我应该尝试在我的 PHP 方法中生成唯一键并在之后检查重复项?

4

2 回答 2

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);

等等..

问候

于 2012-06-03T08:58:18.737 回答
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

于 2012-06-03T08:57:49.797 回答