【问题标题】:Zend subquery argumentsZend 子查询参数
【发布时间】:2011-11-04 14:06:26
【问题描述】:

下面的查询代表我正在尝试做的事情,我需要拉入 blog_posts 列表并加入用户表。

它还在做的是从 blog_updates_pictures 中提取一个随机的“picture_filename”。它需要 blog_updates 作为连接来引用 blog_update_id。

我现在想做的也是为每个 blog_post 计算 blog_updates 的数量。我认为这是一个子查询,但每个实现都失败了。让 count 接受参数也很好(即 ​​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' ) );

谁能给我指路?

谢谢

【问题讨论】:

标签: php mysql database zend-framework


【解决方案1】:

我现在想做的也是为每个 blog_post 计算 blog_updates 的数量。

您可以使用聚合来实现 - 使用 GROUP BY bu.blog_id,并作为附加列 COUNT(bu.blog_id) AS blog_updates_count。它应该工作。

【讨论】:

  • 这确实有效,但我怎样才能指定日期参数?然后它只会找到有更新的 blog_posts ...
  • 我写的代码也会发现没有更新的帖子。这取决于使用 LEFT 或 INNER JOIN,而不是 GROUP BY。指定日期?您可以正常指定日期参数 WHERE date_created
  • 添加 where 子句仅返回更新为 date_created
  • GROUP BY bu.blog_id 替换为GROUP BY b.blog_id
  • 是的,这是一个更正,但我仍然可以将特定日期的更新规范放在哪里?
【解决方案2】:

创建子选择:

$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' )
);

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

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多