0
$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适合呢?

4

3 回答 3

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 通配符 [...] 您可以在简单的字符串数组中列出列,或者作为列别名到列名的关联映射。如果您只有一列要查询,并且不需要指定列别名,则可以将其列为纯字符串而不是数组。

附带说明一下,您可以简单地回显查询以查看它会产生什么(与上面相同的页面):

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

于 2013-06-12T08:17:29.440 回答
0

如果你被卡住了,并且想要一个简单的把 Zend_Db_Select 对象变成 SQL 查询,你可以这样做:

echo $select;

这在调试时非常方便。

于 2013-06-12T08:21:54.750 回答
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());

我猜这就是你问的。

于 2013-06-12T08:25:14.403 回答