SQL 在同一行上插入语句


SQL Insert statements on same line

我目前正在使用 PHP 构建一个学习平台,并希望记录用户对所提问题的回答 - 我已经在几个 php 页面上构建了数据库和问题,并使用插入语句将响应值添加到数据库中,但是当用户移动到并回答下一个问题时,他们的答案被放在下一个 SQL 行上,这意味着 SQL 数据库中的大空格。是否有将用户对每个问题的回答放在同一行上,或者这是我必须习惯和忍受的事情?

我的插入语句如下所示:

$sql="INSERT INTO pro_NoMusic (question8a, question8b, question8c, question8d, question8e) 
      VALUES ('$_POST[question8a]','$_POST[question8b]','$_POST[question8c]','$_POST‌​[question8d]','$_POST[question8e]')";

我的表格每个问题都有一列:

question1a, question2Aa, question2Ab, question2Ac, question2Ad, question2Ae,
question2Ba, question2Bb, question2Bc, question2Bd, question2Be,
question2Ca, question2Cb, question2Cc, question2Cd, question2Ce,
question2Da, question2Db, question2Dc, question2Dd, question2De,
question3a,question3b, question3c, question3d, question3e, question4,
question5a, question5b, question5c, question5d, question5e, question6,
question7, question8a, question8b, question8c, question8d, question8e

我想知道您如何记录哪些用户在回答这些问题? 大多数设计器会在这样的表中包含某种user_id列。

专业提示:规范化此数据。许多设计师会使用这样的表格来回答这样的答案。

user_id      int(11)  
question     varchar(10)   values like '1a', '2Aa', '8d', etc.
answer       varchar(255)
ts           datetime

这里的主键可能是(user_id,问题)的复合键。 此表将包含任何问题的每个答案的一行,而不是包含测验中所有问题的答案的一大堆列。

然后,您可以使用一系列"插入...关于重复键更新语句,以在数据库中记录用户的答案。

$sql="INSERT INTO pro_NoMusic (userid, question, answer, ts)
      VALUES ($_POST[user_id], '8a','$_POST[question8a]', NOW())
      ON DUPLICATE KEY UPDATE answer='$_POST[question8a]', ts=NOW())";