代码之家  ›  专栏  ›  技术社区  ›  Kevin

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

  •  0
  • Kevin  · 技术社区  · 8 年前

    我想找到喜欢我产品的用户和关注我的用户。然而,可能有用户喜欢我的产品,也跟着我,然后我将检索相同的用户id两次。 有没有办法只记录一次而不是两次相同的用户id?

    下面是我用来识别喜欢我的产品的用户和关注我的用户的代码。

    $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 回复  |  直到 8 年前
        1
  •  1
  •   Alberto Favaro    8 年前

    您可以将第一个查询的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));