嵌套CASE语句我有测验例如嵌套的SQL查询来更新多个表。它包含两个case语句,该语句在对数据库执行查询时检查特定条件。下面是代码:UDATE查询与PHP和MySQL
// form data
$edit_qid = isset($_POST['editqid']);
$edit_question = isset($_POST['editquestion']);
$edit_ans1 = isset($_POST['editanswer1']);
$edit_ans2 = isset($_POST['editanswer2']);
$edit_ans3 = isset($_POST['editanswer3']);
$edit_correct = isset($_POST['editcorrect']);
// answer ids (comes from another query and it's valid)
while ($rows = mysqli_fetch_assoc($result_aid)) {
$aid[] = $rows['aid'];
}
// update of chosen question and answer options to DB
$upd_question = "UPDATE `question_bank` qtbl INNER JOIN `answer_bank` atbl
SET qtbl.`question`='".$edit_question."',
atbl.`answer`= CASE WHEN atbl.`aid`='".$aid[0]."' THEN '".$edit_ans1."'
WHEN atbl.`aid`='".$aid[1]."' THEN '".$edit_ans2."'
WHEN atbl.`aid`='".$aid[2]."' THEN '".$edit_ans3."'
END
atbl.`correct` = CASE WHEN ".$edit_correct."=='1' THEN '1'
WHEN ".$edit_correct."=='2' THEN '1'
WHEN ".$edit_correct."=='3' THEN '1'
ELSE '0'
END
WHERE qtbl.`qid`=atbl.`question_id` AND qtbl.`qid`='".$edit_qid."'";
mysqli_query($mysqli, $upd_question) or die ("<b>Update of question failed:</b> " . mysqli_error($mysqli));
可变$edit_correct
包含任一值1,2或3相对于回答字符串和根据上述查询到DB那里将被保存的1或0(真/假),这意味着该如果值是1,那么真正的将被保存为第1个答案选项等这段代码的
跑步给了我以下错误:
Update of question failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'atbl.`correct` = CASE WHEN 2=='1' THEN '1' WHEN 2=='2' THEN '1' ' at line 7
任何想法来解决这个问题?提前致谢。
UPDATE
而且,我有以下条件检查:
,atbl.`correct` = CASE WHEN '". if($edit_correct=='1') {echo 1;} ."' THEN '1'
WHEN '". if($edit_correct=='2') {echo 1;} ."' THEN '1'
WHEN '". if($edit_correct=='3') {echo 1;} ."' THEN '1'
ELSE '0'
END
,并得到这个错误:Parse error: syntax error, unexpected 'if' (T_IF)
@RyanVincent但我要检查'$ edit_correct'无论是1或2或3的值,然后保存在'DB的correct'领域适当真/假值。因此我在case语句中使用了'==',但是我不确定它是否正确。 – Dozent