簡體   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