2011-11-04 55 views
2

以下查询代表我正在尝试执行的操作,我需要拉入blog_posts列表并加入用户表。Zend子查询参数

它还在做的是从blog_updates_pictures中随机抽取'picture_filename'。它需要blog_updates作为引用blog_update_id的连接。

我现在想要做的还是计算每个blog_post的blog_updates数量。我认为这是一个子查询,但每个实现都失败了。计数接受参数也是很好的(例如,blog_updates where date =?)。另外,blog_post可能没有更新或图片。

$select = $db->select(); 
$select->from (array ('b' => 'blog_posts'), array('headline', 'date_created')); 
$select->join (array ('u' => 'users'), 'u.user_id = b.user_id', array ('email')); 
$select->joinLeft (array ('bu' => 'blog_updates'), 'bu.blog_id = b.blog_id', array()); 
$select->joinLeft (array ('bup' => 'blog_updates_pictures'), 'bu.blog_update_id = bup.blog_update_id', array ('picture_filename')); 

有人可以告诉我方式吗?

感谢

+2

检查此答案以了解如何使用Zend_Db_Select创建子查询http://stackoverflow.com/questions/5604872/nested-select-using-zend-db/5609246#5609246 – satrun77

+0

搭起一个示例架构+数据,我会提出一个解决方案。 –

回答

0

我想什么现在要做的是,也算blog_updates每个blog_post的数量。

您可以使用聚合 - 使用GROUP BY bu.blog_id和另外的列COUNT(bu.blog_id) AS blog_updates_count。它应该工作。

+0

这是行不通的,但我怎么才能指定日期参数?它只会发现有更新的blog_posts ... – bluedaniel

+0

我写的代码也会发现没有更新的帖子。这取决于使用LEFT或INNER JOIN,而不是GROUP BY。 Specyfing日期?您可以指定日期参数为正常WHERE date_created <[日期]。 – singles

+0

添加where子句只会返回date_created <更新的blog_posts。我希望它返回所有blog_posts,如果它们不符合搜索条件,则更新为null。 – bluedaniel

0

创建子选择为:

$subselect = $db->select() 
    ->from(
    array ('bu' => 'blog_updates'), 
    array(
     'blog_id', 
     'updates' => 'count(*)' 
    ) 
) 
    ->group("bu.blog_id"); 

再加入$再选择与您的主要$选择为:

$select->join(
    array('t' => $subselect), 
    "t.blog_id = b.blog_id", 
    array('updates') 
); 

如果我们有表的结构,你可能会得到一个更完整的答案