我有一个串行密钥表
+----+---------------------+------+
| id | product_key | used |
+----+---------------------+------+
| 1 | 3C45-GH76-9V74-HLKJ | 1 |
| 2 | REDF-6KI9-00IU-4867 | 0 |
| 3 | 1111-1111-1111-1111 | 0 |
| 4 | 2222-2222-2222-2222 | 0 |
| 5 | 3333-3333-3333-3333 | 0 |
+----+---------------------+------+
我想使用zend框架获得used=0
的一行记录。如果used=1
已选择,则更改为product_key
。
我使用Zend感到困惑。
我认为是这样的,但是如果选择了该产品密钥,如何分配“1”?
$productKey = $this->_helper->model('ProductKeys')->fetchOne('SELECT * from product_keys WHERE used=0 LIMIT 1');
答案 0 :(得分:1)
在单个简单查询中似乎没有办法实现。此外, fetchOne 仅获取第一条记录的第一列。该助手只返回ID,而不是product_key。
选项1: 修改ProductKeys模型以获取密钥并将其设置为使用:
class My_Model_ProductKeys extends Zend_Db_Table_Abstract
...
function getKeyAndMarkUsed()
{
$select = $this->select();
$select->where('used=?',1)->limit(1)->order('ID');
$keyRow = $this->fetchRow();
if ($keyRow){
$this->update(array('used'=>1),'id='.$keyRow->ID);
return $keyRow->id;
}
else{
//no keys left! what to do??? Create a new key?
throw new Exception('No keys left!');
}
}
然后你会:
$productKey = $this->_helper->model('ProductKeys')->getKeyAndMarkUsed();
选项2 : 创建一个数据库过程来执行上述功能并调用它。