Zend的DB / MySQL的 - 有选择Insert(Zend Db / Mysql - Ins

2019-10-17 05:06发布

我试图找到做到这一点的最好办法,更好,如果我可以使用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。

谢谢!

Answer 1:

我的解决方案(使用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



Answer 2:

只要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');


文章来源: Zend Db / Mysql - Insert with Select