如何在PHP的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 :(得分:1)
仅供参考,请注意ZF2中还有另一个Zend \ Sql \ Predicate \ Expression类。如果你看一下Select :: from(),我认为你不能将任何Expression对象作为表名传递。
因此,快速解决方案是使用子选择。但它有些丑陋;)
$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