我得到了一个名为summary的页面,它基本上显示了他们参加的所有考试的用户列表以及他们花了多长时间等。我试图做的是只根据用户id提取数据。因此,如果我有一个叫simon的人和另一个叫mark的人,我不希望simon看到分数数据。只向用户显示他们拥有的内容。
这是我的功能:
function get_student_summary () {
$data = array();
$result = mysql_query("SELECT a.*,b.*,c.*,d.*,e.* FROM mock_exam_quiz a, mock_exam_student_summary b, mock_exam_users c, mock_exam_questions d, mock_exam_category e WHERE a.quiz_id = b.exam_id AND c.user_id = b.user_id AND d.question_id = b.question_id AND e.category_id = b.category_id");
while ($row = mysql_fetch_assoc($result)) {
$data [] = $row;
}
return $data;
}
这是用户将如何在摘要页面上查看考试详细信息的片段。屏幕截图
下面的图片是我存储所有数据的数据库表的屏幕截图。数据库屏幕截图。如果你看user_id,有两个不同的用户,正如我所提到的,我希望用户看到属于他们的那个。我不想向其他用户显示任何其他用户的数据。
如果我混淆了任何人或没有详细解释这个问题,我很抱歉,但如果你有任何问题,请问。在过去的几天里,我一直被这个问题困扰着,我感谢你们的帮助。
您要做的是通过函数传递ID,并在查询中使用该ID。
你的功能看起来像这样:
function get_student_summary ($id) {
$data = array();
$result = mysql_query("SELECT a.*,b.*,c.*,d.*,e.* FROM mock_exam_quiz a, mock_exam_student_summary b, mock_exam_users c, mock_exam_questions d, mock_exam_category e WHERE a.quiz_id = b.exam_id AND c.user_id = b.user_id AND d.question_id = b.question_id AND e.category_id = b.category_id AND c.user_id='".$id"'");
while ($row = mysql_fetch_assoc($result)) {
$data [] = $row;
}
return $data;
}
您会注意到,在查询的末尾,我将AND c.user_id='".id"'
放在了哪里。我已经很久没有做PHP了,但我认为您也应该使用mysqli
或pdo
进行查询。
编辑:
所以当你这样做的时候:
get_student_summary($id) as $r
您还应该从这里传入此人的ID。我想象有人在进入这个页面时点击了一个按钮,所以点击这个按钮就可以进入那个页面。
您可以通过在函数中传递id参数来单独查看学生的详细信息,并在sql where子句中使用id:
get_student_detail ($id){
global $db;//$db is your database connection
$singlestudent=array();
$result = mysql_query("SELECT a.*,b.*,c.*,d.*,e.* FROM mock_exam_quiz a,
mock_exam_student_summary b, mock_exam_users c,
mock_exam_questions d, mock_exam_category e
WHERE a.quiz_id = b.exam_id AND c.user_id = b.user_id
AND d.question_id = b.question_id
AND e.category_id = b.category_id AND b.user_id='$id'", $db);
while($data = mysql_fetch_assoc($result)):
$singlestudent[] = $data;
endwhile;
return $singlestudent;
}
现在您可以拨打:
get_student_detail(12);//Assigning one student whose id = 12;
注意:不要使用去缓存的mysql扩展,使用mysqli或PDO。
只需在查询中指定一个用户id
$user_id = 71;
$result = mysql_query("SELECT a.*,b.*,c.*,d.*,e.* FROM mock_exam_quiz a, mock_exam_student_summary b, mock_exam_users c, mock_exam_questions d, mock_exam_category e WHERE a.quiz_id = b.exam_id AND c.user_id = b.user_id AND d.question_id = b.question_id AND e.category_id = b.category_id AND b.user_id = ".$user_id);
或者迭代并将其全部放在具有子阵列的一个阵列中
<?php
function get_student_summary() {
$userList = array();
$data = array();
$users = mysql_query("SELECT user_id FROM mock_exam_student_summary");
while ($row = mysql_fetch_assoc($users)) {
$userList[] = $row;
}
foreach (array_unique($userList) as $user) {
$tempData = array();
$result = mysql_query("SELECT a.*,b.*,c.*,d.*,e.* FROM mock_exam_quiz a, mock_exam_student_summary b, mock_exam_users c, mock_exam_questions d, mock_exam_category e WHERE a.quiz_id = b.exam_id AND c.user_id = b.user_id AND d.question_id = b.question_id AND e.category_id = b.category_id AND b.user_id = '".$user."'");
while ($row = mysql_fetch_assoc($result)) {
$tempData[] = $row;
}
array_push($data, $tempData)
}
return $data;
}
$list = get_student_summary();
// Would Return In Theory
/*
$list = Array(
Array(
quiz_name
category_name
etc.
),
Array(
quiz_name
category_name
etc.
),
Array(
quiz_name
category_name
etc.
),
)
*/
?>