2016-10-17 16 views
0

我正在使用zend,但這個問題的答案完全可以在mysql中給出。如何在連接查詢後將「FIRST」表的列移動到結果中的最後一個?

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

你的意思是你想改變結果中列的順序?

在SQL你可以簡單地選擇您需要的順序列。 Like

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實例

// 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') 
+0

由於菲利普,我從第一表格中移除所述'errorCount'柱和聯接使用'之後加入它$ select-> columns('errorCount','gatewayTable')' –

+0

@Phillip:就是這樣,我不想改變我的_getView(),即我不想「不要在開始時選擇errorCount」然後將它添加到需要的地方,有沒有像removeColumn(),刪除列? –

相關問題