如何检索仅属于指定用户的数据?

时间:2016-03-26 14:18:49

标签: php mysql sql function

我得到了这个名为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;
} 

这是用户如何在摘要页面上查看考试详细信息的片段。 Screenshot

下图是我的数据库表的屏幕截图,我将存储所有数据。 Database screenshot。如果您查看user_id,则有两个不同的用户,正如我所提到的,我希望用户看到属于他们的用户。我不想向其他用户显示任何其他用户的数据。

如果我弄糊涂了或者没有详细解释问题,我很抱歉,但如果您有任何疑问,请询问。过去几天我一直坚持这个问题,感谢你们的帮助。

3 个答案:

答案 0 :(得分:1)

只需在查询中指定用户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.

        ),
    )
*/

?>

答案 1 :(得分:1)

您需要做的是通过该功能传递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,但我认为您应该使用mysqlipdo来查询。

修改

所以当你这样做时:

get_student_summary($id) as $r您还应该从这里传递此人的身份证件。我想有人在访问此页面时点击了一个按钮,所以在点击该按钮时将其传递给该页面。

答案 2 :(得分:1)

您可以通过在函数中传递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;

注意:不要使用depracated mysql扩展,使用mysqli或PDO。