2017-02-04 96 views
0

我想从数据库中读取数据,两个不同的表,并将每个结果保存在数组中。接下来,我想比较两个查询(数组)的结果是否相等,因为某些原因,此比较不起作用。有什么建议吗?比较来自PHP中的SQL的两个数组

$Subjects = []; 
     $var = "SELECT ID_Sub FROM Course WHERE ID_Course='$courseid'"; 
     $varquery= mysqli_query($conn,$var) or die(mysqli_error($conn)); 
     while($row = mysqli_fetch_array($varquery,MYSQLI_BOTH)){ 
     $varesiLendet[] = $rowvaresi['ID_Sub']; 
     } 
     $Student= []; 
     $student = "SELECT ID_Sub FROM student WHERE ID_Student='$id'"; 
     $studentquery= mysqli_query($conn,$student) or die(mysqli_error($conn)); 
     while($rowst = mysqli_fetch_array($studentquery,MYSQLI_BOTH)){ 
     $Student[] = $rowst['ID_Sub']; 
     } 
     //checks if the two created arrays are equals 
     sort($Subjects); 
     sort($Student); 
     if($Student != $Subjects){ 
     $error=true; 

     echo "Not equal"; 
     } 
+0

使用'array_diff'代替 –

回答

0

最好在SQL中进行比较。我不确定你想要达到的目标,但这可能是你想要的:

SELECT (c.subs = s.subs) as same_flag 
FROM (SELECT GROUP_CONCAT(ID_Sub ORDER BY ID_sub) as subs 
     FROM Course 
     WHERE ID_Course='$courseid' 
    ) c CROSS JOIN 
    (SELECT GROUP_CONCAT(ID_Sub ORDER BY ID_sub) as subs 
     FROM student 
     WHERE ID_Student='$id' 
    ) s; 

注意:这直接回答你问的问题。但是,有些学生会选择不属于“课程”一部分的“子”。如果逻辑需要修正,您可能想要提供另一个问题样本数据和期望的结果。

+0

我要检查,如果有一定的ID学生谁采取了一些课程,在过去可以申请新的课程,其中某些以往的课程是必须的。总之,我正在学习完这门课程,并将它们与申请新课程所需的课程进行比较。 – PhoebeD

+0

@PhoebeD。 。 。你应该提出另一个问题,并在评论中给出解释。提供样本数据和期望的结果。 –

+0

我修好了,非常感谢。 – PhoebeD

0

下面的代码使用

sort($Subjects); 
    sort($Student); 
    $result = array_diff($Subjects, $Student); 
    if(count($result) >0){ 
    $error=true; 

    echo "Not equal"; 
    } 
+0

谢谢!我试图实现这个部分,但它显示了一个消息错误,如“注意:使用未定义的常量结果 - 假设的结果” – PhoebeD

+0

哦,明白了,你忘记了'$'if语句:) – PhoebeD

+0

谢谢plz接受解 –