Php MySql从两个表中选择不同

时间:2014-08-05 18:09:00

标签: php mysql sql

谢谢大家。 我赞扬你的建议。但令人遗憾的是,到目前为止还没有任何解决方案。 然而,在我昨天发布问题后,我回去亲自编辑代码,我得到了一个小解决方案(50%)。 其他50%在下面的查询中。该查询选择已经选择的行。 我该如何遏制这个?

包含许多问题,包括选项和正确的答案。 Student_Id是Student表中的外键。但Student_Id存储在$ Session变量中。 Subject_Id也是来自Subject_master表的外键,Subject_Id也是$ Session变量。

如果学生回答了问题,则不应再次选择该问题。但是,目前有超过1名学生参加考试。 因此,为避免学生多次回答问题,在提交问题1时,将在表格中插入question_Id,student_id,subject_id和quiz_id。

因此,在Exam.php页面上调用问题之前,我将检查表是否包含student_id,quiz_id,subject_id和question_id是否为0。 如果是,mysql将从表中选择一行 - LIMIT 1(每页一个问题)。 如果不是,mysql将选择不等于第一个选定行的不同行。 但是我在选择下一个问题时遇到了问题。 请检查下面的代码并帮助我......谢谢。

Exam.php文件

<?php 
if (!isset($_SESSION)) 
{ session_start();  }

include_once('connectionFile.php');//connection to database
$Quiz_Id = $_Session['Quiz_Id'];//type of exam - PK from quiz_category table.
$ats_Id = $_Session['Subject_Id'];//subject_id from subject_master table
$appID = $_Session['appID']; //student_id from student table
$SID=$_GET['Id']; //this is exam schedule id from a url string that was passed from another page.   
  

//检查学生的u_answer表中是否存在行   其ID存储在$ session中。如果不存在,则表示学生没有   存在。

$sql4 = "select * from u_answer,question_master where u_answer.AS_Id = '".$_SESSION['appID']."' and question_master.Question_Id = u_answer.Question_Id and question_master.Quiz_Id = u_answer.Quiz_Id and question_master.ats_Id = u_answer.ats_Id";
$result = mysql_query($sql4, $con) or die (mysql_error());
$records = mysql_num_rows($result);

if($records == 0){

    echo '<script type="text/javascript">alert("TRUE - No Records Match.");</script>';

$sql5 = "select * from question_master where Quiz_Id = '".$Quiz_Id."' and ats_Id = '".$ats_Id."' ORDER BY RAND() LIMIT 1";
        }else {

如果u_answer表中没有基于select查询条件的记录,则提醒我并运行$ sql5 query - 并从question_master表中选择一行,仅限于1个问题。

这就是问题所在。

$sql5 = "SELECT question_master.Question_Id, question_master.Quiz_Id, question_master.ats_Id, 
question_master.Question, question_master.Option1, question_master.Option2, question_master.Option3,
question_master.Option4, question_master.Status, question_master.Answer, u_answer.AS_Id, u_answer.UserAnswer, 
u_answer.Score FROM question_master, u_answer WHERE question_master.Quiz_Id = '".$Quiz_Id."' and 
question_master.ats_Id = '".$ats_Id."' and question_master.Question_Id <> u_answer.Question_Id and u_answer.AS_Id 
= '".$_SESSION['appID']."' order by u_answer.Question_Id LIMIT 1";
}$result2 = mysql_query($sql5);

$result2 = mysql_query($sql5); 

创建一个计数器变量$ i并从sql中获取行。

$i=1;
while($row = mysql_fetch_array($result2))
{
$Id=$row['Question_Id'];
$Question=$row['Question'];
$OptionA=$row['Option1'];
$OptionB=$row['Option2'];
$OptionC=$row['Option3'];
$OptionD=$row['Option4'];
$Status=$row['Status'];
$Answer=$row['Answer'];
$Quiz=$row['Quiz_Id'];
$atsid=$row['ats_Id'];
}
?>

在testResult.php文件中,u_answers表将更新为用户已经回答的问题。因此,在选择中,不应再次选择使用其Id的特定问题。

<?php
// Close the connection
mysql_close($con);
?>                        
</div></form>

当提交问题的答案时,调用testResult.php?Id = 2文件来处理问题。 处理表单元素后,表单元素将插入到u_answer表中。 因此,对于每个回答的问题,u_answer表中都会有一个新行。

问题是: 选择并回答第一个问题后,将更新u_answer。 之后选择其他行。但是,先前选择的行会被重新选中。 这就是我想要防止的。 如果它选择了question_master表中的所有问题,并且没有其他可供选择的免费问题,则应该返回到result.php页面。 result.php页面显示了所有已回答问题与其分数的对照。

错误:

未检测到错误。只有这样,它重复以前选择的行。 请进一步帮助......谢谢。

0 个答案:

没有答案