嗨,任何帮助将不胜感激,因为我似乎无法找到导致我的数据被复制的错误,并且向用户回复3次而不是一次。如果有人能帮我解决这个问题,谢谢。
<?php
session_start();
//Connect to database
if(!isset($_SESSION['username'])) { //check if user-name is not given
echo('you are not authorised to veiw this page, log in with admin account to view it');
//show login page
include 'login.html';
}
$con=mysqli_connect("localhost:3307","root","usbw","degreeproject");
//check if query sucessful else report error
$classid = $_GET['classid'];
$studentid = $_GET['userid'];
$sql3 = "SELECT usernames.username, quizzes.QuizID, results.score, results.QuizID,enrolledclasses.UserID, quizzes.ClassID FROM `results`, enrolledclasses, usernames, quizzes
WHERE usernames.username = results.username
AND quizzes.QuizID = results.QuizID
AND enrolledclasses.UserID = $studentid
AND quizzes.ClassID = $classid;";
if (!$result3=mysqli_query($con,$sql3)) {
die('Error: ' . mysqli_error($con));
}
else {
//count the number of records from the query result
$count=mysqli_num_rows($result3);
}
if($count>=1) {
$result3 = mysqli_query($con,$sql3);
while(list($Username, $QuizID, $Score) = mysqli_fetch_row($result3)) {
$sql = "SELECT COUNT(Question) as total FROM questions WHERE QuizID = $QuizID";
$result = mysqli_query($con, $sql);
$numquestions;
if($result->num_rows > 0) {
$numquestions = $result->fetch_assoc()['total'];
}
echo"<table>";
echo "<tr>";
echo "<th>Username: </th>";
echo "<th>QuizID: </th>";
echo "<th>Score: </th>";
echo "<th>Go Back: </th>";
echo "</tr>";
echo "<tr>";
echo("<td>$Username</td>");
echo("<td>$QuizID</td>");
echo("<td>$Score / $numquestions</td>");
echo("<td></td>");
echo "<td><a href ='../CurrentlyBeingWorkedOn/index.php'> Go Back Home </a></td>";
echo"</tr>";
echo"</table>";
}
}
$con->query($sql3);
echo("<p>Successfully Retrieved The Results For The Quizzes Students Have Taken.</p>");
echo("<p><a href='javascript:history.back(1);'>Return To Previous Page</a></p>");
?>
这是代码的结果以及输出给用户的内容。
[产生的结果] [1] [1]:https://i.stack.imgur.com/hn5jm.png
答案 0 :(得分:0)
从我看到你的加盟条件有问题。用户名和结果,测验和结果之间存在关联。但是注册类与任何其他表之间没有关系。在where子句中添加关系,您将找到所需的输出。
SELECT usernames.username, quizzes.QuizID, results.score, results.QuizID,enrolledclasses.UserID, quizzes.ClassID FROM `results`, enrolledclasses, usernames, quizzes
WHERE usernames.username = results.username
AND quizzes.QuizID = results.QuizID
AND enrolledclasses.UserID = usernames.UserID
AND enrolledclasses.ClassID= quizzes.ClassID
AND enrolledclasses.UserID = $studentid
AND quizzes.ClassID = $classid;
答案 1 :(得分:0)
尝试使用显式JOIN
语句重写SQL查询:
"SELECT usernames.username, quizzes.QuizID, results.score,
results.QuizID,enrolledclasses.UserID, quizzes.ClassID
FROM usernames u
JOIN results r ON u.username=r.username
JOIN quizzes q ON q.QuizID=r.QuizID
JOIN enrolledclasses ec ON ec.?=?.?
WHERE q.ClassID = $classid AND ec.UserID=$studentid"
您需要为您的注册类表提供一个连接条件,我无法从您给定的代码中看到 - 也许您可以将其加入users
表上的用户名或类似内容?只需替换上面给出的代码中的问号。如果您没有任何可以加入的标准,则必须在enrolledclasses
表中引入一个。