繁体   English   中英

PHP SELECT 语句与多行数组作为比较变量的比较

[英]Comparison in PHP SELECT statement with multi-row array as comparing variable

我有一个按 id、sum 和排名分组的查询。 问题是该表包含所有类,并且没有用于定义每个数据类的列。

因此,我必须使用另一个表来获取与被排名的 id 属于同一类的 id,然后比较它们。

这是我已经尝试过但导致错误的代码:

$que = "SELECT * FROM registration WHERE CurrentClass = (SELECT CurrentClass FROM registration WHERE AdmNo = '$user_id')";
$statemen = $connect->prepare($que);
$statemen->execute();
$res = $statemen->fetchAll();

foreach($res as $rowww) { 

    $resu1 = mysqli_query($conn, "SELECT AdmNo, rank, total_score
    FROM (SELECT *  WHERE AdmNo = '".$rowww['AdmNo']."',  IF(@marks=(@marks:=total_score), @auto, @auto:=@auto+1) AS rank 
    FROM (SELECT * FROM 
    (SELECT AdmNo, SUM(Score) AS total_score 
    FROM `{$examination}`, 
    (SELECT @auto:=0, @marks:=0) as init 
    GROUP BY AdmNo) sub ORDER BY total_score DESC)t) as result
    WHERE AdmNo = '$user_id'"); 

    $row1 = mysqli_fetch_assoc($resu1); 
    $sum = $row1['total_score'];
    $position = $row1['rank'];
    $totalMarks = round($sum, 2);

}

据我了解,错误

警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,在 E:\\xampp\\htdocs\\user...

是因为在第一个查询中返回了多行,这就是为什么我需要有关如何解决此问题的帮助。

所需的结果是从注册中选择的 AdmNo 是唯一应该用于排名的 AdmNo。

尝试这个:

$query = "SELECT AdmNo, rank, total_score FROM (
    SELECT *  WHERE AdmNo = '" . $rowww['AdmNo'] . "',  IF(@marks=(@marks:=total_score), @auto, @auto:=@auto+1) AS rank FROM (
        SELECT * FROM (
            SELECT AdmNo, SUM(Score) AS total_score FROM `" . $examination . "`, (
                SELECT @auto:=0, @marks:=0
            ) as init GROUP BY AdmNo
        ) sub ORDER BY total_score DESC
    ) t
) as result WHERE AdmNo = '" . $user_id . "'";

$resu1 = mysqli_query($conn, $query);

暂无
暂无

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

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