我试图找到做到这一点的最好办法,更好,如果我可以使用Zend_Db_Table。 基本上我插入行和值中的一个来自同一个数据库,这个值的变化而不断,所以我需要确定插入的数据是有效的。 我不能先查询该值,然后将其追加到插入查询,因为这两个查询之间的数据可能会改变我结束了在插入错误值。 我不知道是否锁定表是要走的路,或者Zend公司有一个快捷方式。
我使用MySQL。
[EDITED]
例如:此表中有一个名为场ITEM_NUMBER,并为每个新行我拿ITEM_NUMBER最后+ 1(来自同一item_family),并把它插入。 这是一个手动增量。
TABLE ITEMS
| item_id | item_family | item_number | name |
| 15 | 1 | 10 | Pan |
| 16 | 2 | 1 | Dress |
| 17 | 1 | 11 | Spoon |
在这个例子中,你看到,从item_family 1下一行有它= ITEM_NUMBER 11,因为来自同一item_family上一行是10。
谢谢!
我的解决方案(使用Zend)是锁表,比对查询ITEM_NUMBER,结果追加到插入查询,插入和解锁表。 下面是如何锁定和解锁:
$sql = "LOCK TABLE items WRITE";
$this->getAdapter()->query($sql);
//run select to get last item_number
//append result to insert array
//insert
$sql = "UNLOCK TABLES";
$this->getAdapter()->query($sql);
另一种方法是编写查询,以便价值将durint插入进行选择。 下面是一个例子:
$sql = INSERT INTO items (item_id, item_family, item_name, item_number)
VALUES (item_id, item_family, item_name, (SELECT item_number FROM... )+1);
$this->getAdapter()->query($sql);
关于这种类型的查询的更多信息MySQL的Web
只要item_id
是你的表的主键,然后将其设置为自动递增领域, Zend_Db_Table::insert()
函数将返回刚插入的行的主键。
例如 :
$table = new Items();
$data = array(
'item_family' => '1',
'item_number' => '10',
'name' => 'Pan'
);
$itemId = $table->insert($data);
您也可以直接调用mysql的最后插入的ID功能:
$itemId = $this->getAdapter()->lastInsertId('items');