2011-11-04 64 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') 
); 

如果我們有表的結構,你可能會得到一個更完整的答案