Zend子查询参数

时间:2011-11-04 14:06:26

标签: php mysql database zend-framework

下面的查询代表了我要做的事情,我需要提供一个blog_posts列表,并加入一个用户表。

它还在做什么是从blog_updates_pictures中随机抽取'picture_filename'。它需要blog_updates作为引用来引用blog_update_id。

我现在要做的还是每个blog_post的blog_updates数量为COUNT。我认为这是一个子查询,但每个实现都失败了。让计数接受参数(即blog_updates,其中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 个答案:

答案 0 :(得分:0)

  

我现在想做的还是每个blog_post的blog_updates数量为COUNT。

您可以使用聚合实现这一目标 - 使用GROUP BY bu.blog_id,并使用其他列COUNT(bu.blog_id) AS blog_updates_count。它应该工作。

答案 1 :(得分:0)

创建子选择为:

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

然后将$ subselect加入主$ select:

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

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