繁体   English   中英

SQL棘手的嵌套请求

[英]SQL tricky Nested request

我正在做一个学校项目,其中包括在php中做一个类似Facebook的应用程序,并且在处理一个棘手的SQL请求时遇到了一些麻烦。

我的数据库配置是这样的:

在此处输入图片说明

我想在我的朋友列表中找到已经不在的朋友的朋友,以便推荐他们,

我的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>";
}

“从* iduser所在的朋友中选择*(选择GROUP_CONCAT(idFriend)形式的用户u加入好友f,其中f.iduser = u.id和u.id = $ uid)并且ID不参加(从iduser中的朋友中选择GROUP_CONCAT(id) = $ id)“;

:我想这会帮到你。 让我知道您是否遇到任何问题。 :我已更新查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM