下面的查询代表了我要做的事情,我需要提供一个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' ) );
有人可以指路吗?
由于
答案 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' )
);
如果我们有表格结构,您可能会得到更完整的答案