Сложный вложенный запрос SQL - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю над школьным проектом, который заключается в создании приложения, подобного Facebook, в php, и у меня возникли некоторые проблемы с одним хитрым запросом SQL.

Моя конфигурация БД выглядит так:

enter image description here

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

Мой SQLзапросить, чтобы мой список друзей работал должным образом, поэтому я зацикливаю всех своих друзей и выбираю их, но здесь я не знаю, как выбрать их без выбора друга, который уже является моим другом

Вот как я перебираю каждого друга: (я не думаю, что это хороший способ сделать это)

<?php
function recommendation($id)
{
    global $pdo;
    $sql = "SELECT *
            FROM user u
                   LEFT JOIN friends f on u.id = f.iduser
            WHERE isvalidate = 1
              AND ((f.iduser = ? AND u.id != ?) OR ((f.idfriend = ? AND u.id != ?)))
            GROUP BY u.id";

    $q = $pdo->prepare($sql);
    $q->execute(array($id, $id, $id, $id));
    echo "<p>Vous connaisser peut etre:</p>
            <ul id ='recommendation'>";
    $amiscommun = array();

    while ($line = $q->fetch()) {
        //recupération de la liste des amis
        //Pour chaque amis recupération de leur liste d'amis egalement
        $sql = "SELECT *
                FROM user u
                       LEFT JOIN friends f on u.id = f.iduser
                WHERE isvalidate = 1
                  AND (((f.iduser = ? AND u.id != ?) OR ((f.idfriend = ? AND u.id != ?)))
                  AND ((f.iduser = ? AND u.id != ?) OR ((f.idfriend = ? AND u.id != ?))))
                  AND (f.iduser != (SELECT * FROM))
                GROUP BY u.id";
        $q2 = $pdo->prepare($sql);
        $q2->execute(array($line['id'], $line['id'], $line['id'], $line['id'], $line['id'], $id, $line['id'], $id));

        $amis = array();
        while ($line2 = $q2->fetch()) {
            echo "<li>" . $line2['login'] . " est un amis de " . $line['login'] . "</li>";
            $amis[$line['login']][] = array($line2['login']);

            $amiscommunnbr[$line2['login']][] = $line['login'];
            //Stockage a chaque iteration de boucle des amis commun dans un tableau
        }
    }
    $newarray = $amiscommunnbr;

    if (!empty($newarray)) {
        foreach ($newarray as $key => $value) {

            $nbr = count($value);
            echo "<li><a href='index.php?action=bio?" . $key . "'>" . $key . "</a>- " . $nbr . " Amis en commun(";
            foreach ($value as $key2 => $value2) {

                echo "<a href='index.php?action=bio?" . $value2 . "'>" . $value2 . "</a>";

            }
            echo ")</li>";
        }
    }
    echo "</ul>";
}

1 Ответ

0 голосов
/ 17 декабря 2018

"выберите * из друзей, где iduser в (выберите пользователя GROUP_CONCAT (idFriend) из формы u СОЕДИНИТЕ друзей, где f.iduser = u.id и u.id = $ uid) И ID NOT IN (выберите GROUP_CONCAT (id) издрузья, где iduser = $ id) ";

: я думаю, это поможет вам.Дайте мне знать, если у вас возникнут какие-либо проблемы с этим.: Я обновил запрос.

...