2017-07-19 14 views
1

如何在PHP的ZF2上生成這樣的查詢?在ZF2上,如何使用表達式而不是引用表名?

SELECT timestamp FROM generate_series(0,20,5) AS timestamp 

我曾嘗試:

$select = $this->select() 
    ->columns(array("timestamp")) 
    ->from("timestamp" => array("generate_series(0,20,5)")) 

產生:

SELECT "timestamp" FROM "generate_series(0,20,5)" AS "timestamp" 

但隨後在尋找一個名爲generate_series(0,20,5)表不存在

而且也:

$select = $this->select() 
    ->columns(array("timestamp")) 
    ->from(array("timestamp" => new \Zend\Db\Sql\Expression('generate_series(0,20,5)'))) 

但它也產生了一個錯誤:

SELECT "timestamp"."timestamp" AS "timestamp" FROM "Object" AS "timestamp" 

如何把表名到表達,而不是引用的表名的任何想法?

+0

你要哪個查詢執行? – Nawin

+0

@Nawin第一個'SELECT timestamp FROM generate_series(0,20,5)AS timestamp' – matt

+0

所以'generate_series(0,20,5)'是你的表名? – Nawin

回答

1

僅供參考,請注意ZF2中還有另一個Zend \ Sql \ Predicate \ Expression類。如果你看看Select :: from(),我認爲你不能傳遞任何表達式對象作爲表名。

所以一個快速的解決方案是使用子選擇。但它是某種醜陋;)

$prefixColumns = false; 
$select2 = new Select(); 
$select2->columns(array('*'), $prefixColumns); 
$select2->from('generate_series(0,20,5)'); 

$select = new Select(); 
$select->columns(array('timestamp')); // or disable prefixed columns like in $select 2 
$select->from(array('tblAlias' => $select2)); 

這應提供以下查詢:

var_dump($select->getSqlString()); 

SELECT 
    tblAlias.timestamp AS timestamp 
FROM (
    SELECT * FROM generate_series(0,20,5) 
) AS tblAlias 
相關問題