2013-08-03 18 views
1

我在Yii的工作,我有一個名爲表:訪問沒能獲得DISTINCT列值:

它有兩個外鍵:from_user_id和to_user_id其鏈接到「用戶」表。 現在,表訪問有許多相同的'from_user_id',我想在Yii中將它們作爲DISCTINCT進行檢索。

這是我的代碼:

$visited = Visit::model()->findAllByAttributes(array('to_user_id'=>Yii::app()->user->id)); 

$criteria = new CDbCriteria(); 
$criteria->distinct = true; 

foreach($visited as $visits){ 

    echo User::model()->findByPk($visits->from_user_id,$criteria)->getFullName($visits->from_user_id); 

    echo " <br>"; 
} 

但是,我不能讓他們作爲不同。

這是我的輸出:

san 
san 
san 
Leo 
Leo 

我想作爲輸出:

San 
Leo 

這不是讓我不同的值。我在哪裏錯了?

+1

但是還有哪些其他列正在返回?循環中的'print_r($ visits)'。僅僅因爲'from_user_id'的值在該查詢中不是獨一無二的,並不意味着它不是更大的不同數據集的一部分。 –

+0

我對Yii框架不熟悉,不知道該方法用於檢索查詢中的_only_一列。 –

+1

MichaelBerkowski是正確的,您需要告訴Yii只選擇'from_user_id'列。這是通過'$ criteria-> select ='from_user_id';'2完成的。既然你有外鍵,你也應該有對應的關係。告訴Yii急於加載與'from_user_id'外鍵相對應的關係,並在一個查詢中獲取所有數據,而不是N + 1。 – DCoder

回答

1

我無法測試,但除了可能會稍有語法的調整,這會幫助你:

$visited = Visit::model()->findAllByAttributes(
    array('to_user_id'=>Yii::app()->user->id), 
    array('distinct' => True) 
); 

根據商務部,findAllByAttribute接受條件或標準參數作爲第二論據。

如果這是一個數組(根據find()的文檔),它將用於初始化請求的各種criteria properties

+1

這仍然做'SELECT DISTINCT * FROM訪問WHERE to_user_id =:to_user_id'。 – DCoder

+0

@直流電:正好!並感謝你,我能夠做到這一點......它失蹤了:)謝謝! –