2017-12-05 5 views
0

私の製品が好きなユーザーと、自分をフォローしているユーザーを探しています。しかし、私の製品が好きで、私に従ったユーザーがいて、同じユーザーIDを2回取得するユーザーがいるかもしれません。 2回ではなく、同じユーザーIDを1回だけ記録することはできますか?Yii:2つの異なるcdbcriteriaから重複したエントリを見つけて削除する方法

以下は、私の製品が好きだったユーザーと、私に従ったユーザーを識別するために使用したコードです。

$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; 

答えて

1

あなたはこのような配列の最初のクエリからIDを置くことができます。

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

、あなたが

... 
$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; 
} 

第二の基準状態にないを追加することができた後、[編集]

$favoriteuserid配列として$followuseridを作成し、それを一意的にマージします。

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

ありがとうございました!私はaddNotInConditionの使い方を今すぐ手に入れましたが、$ favoriteuseridと$ followuseridをマージする方法はありますか? – Kevin

+0

答えに[編集]を追加します – alvarofvr

+0

ありがとうございました。私は今この種のものを持っている。もう一度ありがとうございます。ああ、もう1つの質問です。 favoriteuseridをマージする必要がなく、一意のidを探したい場合は、これを実装する方法です: $ uniqueIds = array_unique($ followuserid); – Kevin

関連する問題