2015-08-27 80 views
0

我知道這個問題可能會提前問及我已經應用了那裏提到的修復程序,但它們不工作。左連接在活動記錄中不顯示空記錄Yii

這裏是我的問題:

我有,我想加入,並獲得滿意的結果兩個表。

  1. 任務(ID,狀態,task_type_id)
  2. task_type(ID,task_type_name)

有一個對任務task_type之間一對多的關係。

我的要求:

我想所有的用戶已經創建了通過task_type_id,目前未完成分組的任務。

這是我曾嘗試:

$criteria = new CDbCriteria(); 
    $criteria->select = "t.*, t2.task_type_id,count(t2.task_type_id) as total"; 
    $criteria->join = "LEFT JOIN task t2 on t.id=t2.task_type_id"; 
    $criteria->condition = "t.user_id=" . $user_id . " OR t.user_id is NULL"; 
    $criteria->addCondition("t2.user_id=" . $user_id); 
    $criteria->addCondition("t2.status='Incomplete'"); 
    $criteria->group = "t.id"; 
    $criteria->order = 'total desc'; 
    $task_types = TaskType::model()->findAll($criteria); 

它返回的一切正確的,但task_type表的空值不顯示。即它只顯示任務確實存在的task_type。它不顯示task_type不存在的task_type。我想要任務存在或不存在的所有task_types。

有人可以建議修復嗎?我使用了左連接,它應該返回兩種類型的task_types,但它不起作用。

+0

看起來您需要使用LEFT JOIN並將WHERE更改爲AND – Madhivanan

+0

已經使用了LEFT JOIN以及在哪裏更改'where'?條件屬性被轉換爲活動記錄中的哪個位置 – Hammad

回答

0

更新與後來的語句之後

$criteria->condition = "t.user_id=" . $user_id . " OR t.user_id is NULL"; 

$criteria->condition = "COALESCE(t.user_id,1)=" . COALESCE($user_id,1). "; 
0

在T2的條件,後左側激活加入。將它們更改爲Left Join On子句的一部分,因此如果它們不符合,它們將不會從數據集中刪除該記錄。