2016-10-10 85 views
-1

我有一个测验模块,其中我有两个表quiz_questionquiz_optionsquiz_question正在保存问题 和quiz_option保存特定问题的选项。MySQL查询更新多个表

quiz_option的表格结构: id | question_id |文字| is_correct

表结构quiz_question id |标题| desctiption |

哪里question_id是外键的quiz_question

我想编写一个查询更新quiz_question及其所有相应quiz_options id为一个单一的查询。

enter image description here

+0

你为什么要在单个查询更新吗?我不认为这是可能的。如果你想确保更新是原子的,你可以使用事务。 – jussius

+0

你有试过什么吗? – apokryfos

回答

-1

尝试,你可以使用外键连接两个多表的外键的概念更新父表的主键到子表的外键见链接 http://www.hostingadvice.com/how-to/mysql-foreign-key-example/

UPDATE table1 a 
     INNER JOIN table2 b 
      ON a.ID = b.ID 
SET  a.value = b.value 
+1

@ArditMeti [文档](http://dev.mysql.com/doc/refman/5.5/en/update.html)不同意 – apokryfos

+1

@ArditMeti http://stackoverflow.com/questions/4361774/mysql-update-多表与一个查询 – mhmd

0

多表更新。

table quiz_question PK (question_id) 
table quiz_option FK (question_id) 
0

获取问题的ID并逐个更新它们,因为您无法使用单个查询更新两个表。

$ID_VALUE = mysqli_real_escape_string($conn, $_GET['id']); 
UPDATE quiz_option SET fields_name = 'value' WHERE question_id = $ID_VALUE; 
UPDATE quiz_question SET fields_name = 'value' WHERE id = $ID_VALUE; 
+1

[Little Bobby](http://bobby-tables.com/)说*** [你的脚本存在SQL注入攻击的风险。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php)***了解[MySQLi]的[prepared](http://en.wikipedia.org/wiki/Prepared_statement)语句http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不相信它?](http://stackoverflow.com/q/38297105/1011527)请不要教坏的编码习惯。 –

+0

他/她对我来说似乎是一个初学者,所以帮助他/她很容易回答。 – VishalParkash

+0

发布有潜在危险的代码? –

0

下面是该查询:

INSERT INTO quiz_question(title,description) VALUES ('test','test question'); 
INSERT INTO quiz_option(question_id,text,is_correct) VALUES (LAST_INSERT_ID(),'test','0'),(LAST_INSERT_ID(),'test2','0'),(LAST_INSERT_ID(),'test3','0'),(LAST_INSERT_ID(),'test4','1') 
+0

这是插入查询我需要更新table.Anyways我认为这是不可能的单个查询。 –