解释这个Zend_Select并转换为SQL查询?

时间:2013-06-12 08:16:22

标签: php mysql zend-framework zend-db

$select->from(array('u'=>'user'),array('count'=>'distinct count(*)'))
                   ->joinLeft(
                        array('d' => 'details'),
                        'u.detailsid = d.detailsid',
                        array());

我有:

SELECT * FROM user
LEFT JOIN details ON
details.detailsid = user.detailsid;

但是count在哪里适合呢?

3 个答案:

答案 0 :(得分:3)

这是专栏。

SELECT DISTINCT count(*) AS count FROM user AS u
LEFT JOIN details AS d ON
d.detailsid = u.detailsid;

请参阅http://framework.zend.com/manual/1.12/en/zend.db.select.html

  

在from()方法的第二个参数中,您可以指定要从相应表中选择的列。如果未指定列,则默认为“*”,“所有列”的SQL通配符[...]您可以在简单的字符串数组中列出列,或者作为列别名与列名的关联映射。如果您只有一列要查询,并且您不需要指定列别名,则可以将其列为纯字符串而不是数组。

在旁注中,您可以简单地回显查询以查看它将产生的内容(与上面相同的页面):

  

将选择对象转换为SQL字符串 - 如果需要访问与Zend_Db_Select对象对应的SQL查询的字符串表示,请使用__toString()方法。

答案 1 :(得分:0)

如果您遇到问题,并希望将Zend_Db_Select对象轻松转换为SQL查询,则可以执行以下操作:

echo $select;

在调试方面,这非常方便。

答案 2 :(得分:0)

对于使用计数,您需要使用Zend_Db_Expr

$select->from(array('u'=>'user'),array('count'=> new Zend_Db_Expr("distinct count(*)"))
               ->joinLeft(
                    array('d' => 'details'),
                    'u.detailsid = d.detailsid',
                    array());

我猜这就是你问的。