如何在连接查询后将“FIRST”表的列移动到结果中的最后一列?

时间:2016-10-17 07:48:46

标签: mysql join zend-framework

我正在使用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();

1 个答案:

答案 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')