@Deefs

Показывать только тех с кем общие друзья?

Добрый день есть блок показывать рандомно возможных друзей , но было бы лучше показывать тех с кем есть общие друзья как можно реализовать ?

поля в таблице

5a718fc2283c0641584753.png

Функция вывода возможных друзей

function relationship_suggest($limit, $refId = null, $only_people = true) {
    $ignoredUsers = mostIgnoredUsers();
    $refId = ($refId) ? $refId : get_userid();

    $whereClause = "";

    $ignoredUsers = array_merge($ignoredUsers, get_friends($refId));
    $ignoredUsers = array_merge($ignoredUsers, get_requested_friends($refId));
    $friendsFriends = get_friends_of_friend($refId);
    if ($friendsFriends) {
        $friendsFriends = implode(',', $friendsFriends);
        $whereClause .= "id IN({$friendsFriends}) ";
    }

    //$followersFollowing = get_following_following($refId);
    $ignoredUsers = array_merge($ignoredUsers, get_following($refId));

    $userCountry = get_user_data('country');
    $userCity = get_user_data('city');
    $userState = get_user_data('state');
    $whereClause .= ($whereClause) ? " OR `country`='{$userCountry}' OR `city`='{$userCity}' OR `state`='{$userState}' OR avatar !=''": "`country`='{$userCountry}' OR `city`='{$userCity}' OR `state`='{$userState}' OR avatar !=''";
    $whereClause = fire_hook('users.suggestion.sql', $whereClause);
    $after_whereClause = "";
    $after_whereClause = fire_hook('users.category.filter',$after_whereClause,array($after_whereClause, true));
    $ignoredUsers = implode(',', array_merge(array($refId), $ignoredUsers));
    $mutual = array();
     $loggedInFriends = get_friends();
     $userid = get_userid();
    $thisUserFriends = get_friends($userid);
    if (is_array($thisUserFriends)) {
        foreach($thisUserFriends as $f) {
            if (in_array($f, $loggedInFriends) and $f != get_userid()) $mutual[] = $f;
        }
    }
    $fields = get_users_fields();


    $query = "SELECT {$fields} FROM `users` WHERE `id`NOT IN({$refId}) AND ({$whereClause}) AND id NOT IN ({$ignoredUsers}) AND activated=1 {$after_whereClause} ORDER BY rand()";
    $query = fire_hook("state.city.suggestions",$query,array($fields,$refId,$whereClause,$ignoredUsers));
    if($only_people){

        $query = fire_hook('get.suggest.non.doctors',$query,array($fields,$mutual,$refId,$whereClause,$ignoredUsers));
    }
    //exit($query);
    return paginate($query, $limit);
}


Есть еще функция показывает только число общих друзей
function get_mutual_friends($userid) {
    $loggedInFriends = get_friends();
    $thisUserFriends = get_friends($userid);
    $mutual = array();
    if (is_array($thisUserFriends)) {
        foreach($thisUserFriends as $f) {
            if (in_array($f, $loggedInFriends) and $f != get_userid()) $mutual[] = $f;
        }
    }
    return $mutual;
}
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
с кем есть общие друзья как можно реализовать

Выборка из таблицы друзей и еще раз join эту же таблицу ("друзья друзей"). А дальше уже всякие уточнения типа общего города и пр.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы