Yii:如何从两个不同的cdbcriteria中查找和删除重复的条目

问题描述:

I would like to find the users who liked my products and the users who are following me. However, there might be users that who liked my products and also followed me, which then I will retrieve the same user id for two times. is there anyway to only record the same user id once instead of two times?

Below are the codes that I used to identify the users who liked my products and the users who followed me.

$userid = $productModel->userId;
$followCriteria = new CDbCriteria;
$followCriteria->addCondition("follow_userId = $userid");
$followers = Followers::model()->findAll($followCriteria);
foreach ($followers as $follower) {
$followuserid = $follower->userId;

$productid = $productModel->productId;
$favoriteCriteria = new CDbCriteria;
$favoriteCriteria->addCondition("productId = $productid");
$favoritee = Favorites::model()->findAll($favoriteCriteria);
foreach ($favoritee as $favoriteer) {
$favoriteuserid = $favoriteer->userId;

我想找到喜欢我的产品的用户和关注我的用户。 但是,可能有用户喜欢我的产品并且也跟着我,然后我将检索相同的用户ID两次。 无论如何只记录相同的用户ID一次而不是两次? p>

以下是我用来识别喜欢我产品的用户和跟踪我的用户的代码。 p>

  $ userid = $ productModel-&gt  ; userId; 
 $ followCriteria = new CDbCriteria; 
 $ followCriteria-> addCondition(“follow_userId = $ userid”); 
 $ followers = Followers :: model() - > findAll($ followCriteria); 
foreach  ($ followers as $ follower){
 $ followuserid = $ follower-> userId; 
 
 $ productid = $ productModel-> productId; 
 $ favoriteCriteria = new CDbCriteria; 
 $ favoriteCriteria-> addCondition  (“productId = $ productid”); 
 $ favoritee = Favorites :: model() - > findAll($ favoriteCriteria); 
foreach($ favoritee as $ favoriteer){
 $ favoriteuserid = $ favoriteer-> userId  ; 
  code>  pre> 
  div>

You can put the ids from first query in an array like this:

...
foreach ($followers as $follower) {
    $idsAlreadyDiscovered[] = $followuserid = $follower->userId;
...

and after you can add a NOT IN condition in second criteria

...
$productid = $productModel->productId;
$favoriteCriteria = new CDbCriteria;
$favoriteCriteria->addCondition("productId = $productid");

// Remove user ids from first query
$favoriteCriteria->addNotInCondition('userId', $idsAlreadyDiscovered);

$favoritee = Favorites::model()->findAll($favoriteCriteria);
foreach ($favoritee as $favoriteer) {
    $favoriteuserid = $favoriteer->userId;
}

[Edit]

Or you can use your $favoriteuserid and $followuserid as arrays and after merge it in a unique.

...
foreach ($followers as $follower) {
    $followuserid[] = $follower->userId;
}
...
foreach ($favoritee as $favoriteer) {
    $favoriteuserid[] = $favoriteer->userId;
}
...
$uniqueIds = array_unique(array_merge($followuserid, $favoriteuserid));