我正在使用zend,但问题的答案纯粹可以在mysql中给出。
protected function _getView() {
$gatewayTable = new Emailer_Model_DbTable_Gateway();
$select = $this->_getDb()->select()
->from(
array(
'gatewayTable' => $gatewayTable->getTableName()
),
array(
'id',
'name',
'requireAuth',
'smtphost',
'smtpPort',
'sendLimit',
'inError',
'lastError',
'errorCount'
)
);
return $select;
}
$authTable = new Emailer_Model_DbTable_Auth();
$select = $this->_getView();
$select
->join(
array(
'authTable' => $authTable->getTableName()
),
'gatewayTable.id = authTable.idEmailerGateway',
array(
"authId" => "id",
'username',
'fromAddress',
'fromName',
"password" => "encryptedPwd",
'sentCount',
'lastUsed'
)
);
当我对结果$select
执行抓取时,我希望第一个表的errorCount
列位于$res
的最后一列。
$res = $this->_getDb()->query($select)->fetch();
答案 0 :(得分:1)
您的意思是您想要更改结果中列的顺序?
在SQL中,您只需按所需顺序选择列即可。像
SELECT t1.x, t1.y, t2.a, t2.b, t1.z
FROM t1
JOIN t2
对于Zend_Db,有columns()
方法。
https://framework.zend.com/manual/1.10/en/zend.db.select.html
段落将列添加到现有的FROM或JOIN表
在调用这些方法之后,您可能希望在现有的FROM或JOIN表中添加列。 columns()方法允许您在执行查询之前的任何位置添加特定列。您可以将列提供为字符串或Zend_Db_Expr,也可以将这些列作为这些元素的数组提供。可以省略此方法的第二个参数,这意味着要将列添加到FROM表中,否则必须使用现有的相关名称。
使用示例#11使用columns()方法
添加列的示例// Build this query:
// SELECT p."product_id", p."product_name"
// FROM "products" AS p
$select = $db->select()
->from(array('p' => 'products'), 'product_id')
->columns('product_name');
// Build the same query, specifying correlation names:
// SELECT p."product_id", p."product_name"
// FROM "products" AS p
$select = $db->select()
->from(array('p' => 'products'), 'p.product_id')
->columns('product_name', 'p');
// Alternatively use columns('p.product_name')