如何正确使用 sql NOT IN(.)方法


How to properly use the sql NOT IN(..) Method?

我正在尝试做一些叫做"你可能在学校认识但还不是你朋友的人"的事情

我将首先解释我的代码背后的基本逻辑:

我正在获取与当前登录用户在同一所学校的用户 ID(来自主表 -USERS),如果我得到至少 10 行,

然后我问数据库问题来检查(从朋友表- FRIEND)当前用户是否已经是他们的朋友(使用他们的id)

条件:如果当前登录用户是他们的朋友,其中一些{要求 databse 选择(从主表 - 用户)其中 id 不等于 id 在朋友表中和学校等于当前登录用户学校}

问题:在我的代码中,我正在使用sql NOT IN(...)方法,它多次返回友元表中的相同id和不在友元表中的id。即使他们这些用户不在同一所学校

我的问题是:我如何正确使用 NOT IN() 方法在我的代码中获得与 IN($user) 方法相反的方法,或者我可以使用什么适当的逻辑来实现这一点。

请原谅我对你们的要求很多...我是PHP和SQL的孩子

一个实用的代码示例将不胜感激。非常感谢。

下面是我的代码:

function somepeopleyoumayknow(){
global $dbc_conn, $IsLoggIn,$table_name,$friend_request_table,$friends_table ; 
$cu_school = getuser($IsLoggIn,'cell_group');
$peopleids= mysqli_query($dbc_conn,"SELECT * FROM $table_name WHERE 
cell_group='$cu_school'  AND id !='$IsLoggIn' ORDER BY RAND() LIMIT 10");
if(mysqli_num_rows($peopleids) > 0){
while($run_pids = mysqli_fetch_array($peopleids)){
$pid = $run_pids['id'];
//echo $pidd = $run_pids['id']."<br>";
//ckeck if you are already friends
$quer_check_friendship = mysqli_query($dbc_conn,"SELECT user_one,user_two FROM $friends_table
WHERE (user_one='$IsLoggIn' AND user_two IN($pid)) OR (user_one IN($pid) AND user_two='$IsLoggIn')");
$nr = mysqli_num_rows($quer_check_friendship);
if($nr > 0 ){ while($run_nr = mysqli_fetch_assoc($quer_check_friendship)){
    if($run_nr['user_one'] ==$IsLoggIn){
        $user = $run_nr['user_two'];
    }else{
    $user = $run_nr['user_one'];
    }

    $query_not_friend_with = mysqli_query($dbc_conn,"SELECT id FROM $table_name WHERE id NOT IN($user)  AND cell_group='$cu_school' ");
while($run_not_frnds_with = mysqli_fetch_assoc($query_not_friend_with)){ echo "You are not friends with".$run_not_frnds_with['id']."<br>";}
}

}else{
    echo 'Not friends with them so do sothing here';
}
}



}

}

NOT IN 的使用

MySQL NOT IN() 确保继续执行的表达式在参数中不存在任何值。

语法

expr NOT IN (value,...)

例:

如果要从包含非英语或德语书籍的表中获取book_mast行,可以使用以下 sql 语句。

$user = '1, 2, 3';
SELECT `id` FROM $table_name WHERE id NOT IN($user) AND cell_group='$cu_school'