繁体   English   中英

在PHP和MySQL中使用嵌套的CASE语句进行Udate查询

[英]Udate Query with nested CASE statement in PHP & MySQL

我有一个用于问答示例的嵌套SQL查询,以更新多个表。 它包含两个case语句,这些语句在执行对DB的查询时检查特定条件。 这是代码:

// 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,则将true保存为1st答案选项等

运行此代码会给我以下错误:

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)

您必须在两列之间加上逗号,请尝试以下代码:

$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));

在第二种情况下,您可以使用IF()语句,使用IF将使代码更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM