Нужна помощь по написанию списка рекомендаций друзей

DarksLight2

Знаток
⚖️
📜
Здравствуйте, как можно сделать вывод рекомендаций друзей, который основан на друзьях друзей?
Вот пример того, что мне нужно
Screenshot 2019-06-07 14.56.25.png
 

oxy

Постигающий
🏆
📜
💎
Смысл примерно такой

1) Создаешь базу друзей userId, friendId (мой ид, твой ид)
2) Берешь всех друзей друзей SELECT userID, count(*) FROM friends WHERE userID IN (тут массив ID всех твоих друзей (friendId)) GROUP BY userId <- вот тут правда не соображу группировать надо по userId или friendId. Таблицу впадлу делать и проверять, а башка плохо работает с похмелья)))
 

DarksLight2

Знаток
⚖️
📜
У меня получилось что-то типа:

PHP:
                    $query = $mysqli->query("SELECT * FROM `friends` WHERE `accountID` = '".$user['id']."' OR `friendID` = '".$user['id']."'");
                    $friends = $query->fetch_array();
                    $friendsFriends =  $mysqli->query("SELECT `accountID` , count(*)  FROM `friends` WHERE `accountID` IN ('".$friends['friendID']."') GROUP BY `accountID`");
                    while($row = $friendsFriends->fetch_array()){
                        $query = $mysqli->query("SELECT * FROM `accounts` WHERE `id` = '".$row['accountID']."'");
                        $suggestions = $query->fetch_array();
Выводит моего друга, что не так?
 
Последнее редактирование:

oxy

Постигающий
🏆
📜
💎
Ты в первом запросе получаешь массив друзей
[0] => ['id'=>1, 'login'=>'huilo' ... и так далее
А во второй запрос прилетает уже ошибка. Тебе нужно получить только ид друзей и сделать implode что бы запрос выглядел в итоге вот так:
SELECT `accountID` , count(*) FROM `friends` WHERE `accountID` IN (1,3454,666,900) GROUP BY `accountID`
 

DarksLight2

Знаток
⚖️
📜
Окей, спасибо, получилось, но теперь если можешь помоги мне с еще одной проблемой.
Я планирую сделать добавление в друзья таким образом, что человек который добавляется будет заноситься в `accountID` , а человек к которому я хочу добавиться в
`friendID`. Если допустим поставить мой ид в `friendID`, а ид друга в `accountID` то по идеи работать не будет. Как это все сделать?
 

DarksLight2

Знаток
⚖️
📜
Вот код который получился, вдруг кому пригодиться

PHP:
                <?
                    $query = $mysqli->query("SELECT `friendID` FROM `friends` WHERE `accountID` = '".$user['id']."' OR `friendID` = '".$user['id']."'");
                    $friends = $query->fetch_array();
                    $f = implode(",", $friends);
                    $friendsFriends = $mysqli->query("SELECT `friendID` FROM `friends` WHERE `accountID` IN (".$f.") GROUP BY `friendID` LIMIT 4");
                    while($row = $friendsFriends->fetch_array()){
                        $query = $mysqli->query("SELECT * FROM `accounts` WHERE `id` = '".$row['friendID']."'");
                        $suggestions = $query->fetch_array();
                        $_count = $mysqli->query("SELECT count(*) FROM `friends` WHERE `friendID` = '".$friends['friendID']."'");
                        $count = $_count->num_rows;
                        $__friends = "общих друзей";
                        if($count == 1)
                            $__friends = "общий друг";
                        else if($count > 1 AND $count < 5)
                            $__friends = "общих друга";
                ?>
                    <li class="inline-items">
                        <div class="author-thumb">
                            <img width="36px" src="img/<?=$suggestions['avatar']?>" alt="author">
                        </div>
                        <div class="notification-event">
                            <a href="/profile/<?=$suggestions['id']?>" class="h6 notification-friend"><?=$suggestions['firstName']?> <?=$suggestions['lastName']?></a>
                            <span class="chat-message-item"><?=$count?> <?=$__friends?></span>
                        </div>
                        <span class="notification-icon">
                            <a href="/profile/<?=$suggestions['id']?>/reaqestFriend/" class="accept-request">
                                <span class="icon-add without-text">
                                    <svg class="olymp-happy-face-icon"><use xlink:href="icons/icons.svg#olymp-happy-face-icon"></use></svg>
                                </span>
                            </a>
                        </span>

                    </li>
                    <?
                    }
                    ?>
 
Последнее редактирование:

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
<a href="/profile/<?=$suggestions['id']?>/reaqestFriend/" class="accept-request">
Называть для удобства лучше всё таки единообразно reaqest≠request :)

Упрощай:
PHP:
<?php
# ...
    $count = $_count->num_rows;
    $__friends = "общих друзей";
    if($count == 1)
        $__friends = "общий друг";
    else if($count > 1 AND $count < 5)
        $__friends = "общих друга";
?>
    ...
    <span class="chat-message-item"><?=$count?> <?=$__friends?></span>
    ...
PHP:
<?php
# Минус одна переменная. И в HTML только одно значение, а не два.
    $__friends = $_count->num_rows." общих друзей";
    if($_count->num_rows == 1)
        $__friends = $_count->num_rows." общий друг";
    else if($_count->num_rows > 1 AND $_count->num_rows < 5)
        $__friends = $_count->num_rows." общих друга";
?>
    ...
    <span class="chat-message-item"><?= $__friends ?></span>
    ...
Запрос плохой:
SQL:
SELECT `friendID` FROM `friends` WHERE `accountID` = '".$user['id']."' OR `friendID` = '".$user['id']."
Почему? Потому что вторым условием просишь: покажи мне friendID в строчках, где friendID = $user['id']. То есть ты сразу можешь сказать, что $query = $user['id'] и не выполнять лишний запрос в базу.

Вообще расскажи на пальцах свой алгоритм. Я нутром чую, что ты перекрутил и усложнил, но, так как хрен пойми что именно ты отдаёшь на экран…
 

DarksLight2

Знаток
⚖️
📜
Ну вот смотри, я добавляюсь к тебе в друзья, мой ид заниситься в ячейку accountID, твой ид заноситься в ячейку friendID.
Таким образом у меня будут работать рекомендации друзей, а у тебя нет, так как твой ид не состоит в ячейке accountID.
Я вот думаю, если при подаче заявки в друзья отправлять в базу не один запрос где мой ид в accountID, а твой в friendID, а два запроса, так как говорил высше и где уже твой ид accountID, а мой friendID.

Но жопой чую где-то будет подвох.
Замечания увидел, уже исправляю
 

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
А добавление в друзья — двухсторонний процесс, или это односторонняя подписка?
Ну то есть как. Вы оба добавились и теперь читаете рекомендации друг друга. А если человек не хочет читать рекомендации от тебя? А если ты его добавил, а он те6я не хочет добавлять? Что тогда?
 

DarksLight2

Знаток
⚖️
📜
Двухсторонний процесс, один человек должен подтвердить дружбу, без подтверждения человек не будет получать рекомендации или новости
 
Сверху