将尝试解释我的问题,抱歉我的英语不好:)
我正忙于测验系统。
那么表格是什么样的:
- Users
- Question
- Answers
- Sended Answers
对于我的问题,用户表并不是必需的。
问题表如下:
- Questions.ID
- Question.Text (the question)
答案表是这样的:
- Answers.ID
- Answers.QuestionID
- Answers.Text
- Answers.Good
发送的答案表如下:
- sAnswers.ID
- sAnswers.QuestionID
- sAnswers.FilledAnswers
- sAnswers.UserID
Answers.Good 就像 0 = 不好/1 = 好。
什么是我使用 UsersName 获取所有已发送的答案并查找 sAnswers 是否正确。
我试过:
public function countScores($bind=""){
$sql = "SELECT sAnswers.*, users.name, Answers.*
FROM sAnswers
INNER JOIN users ON sAnswers.userID = users.id
INNER JOIN Answers ON sAnswers.FilledAnswers = Answers.QuestionID";
$result = $this->run($sql,$bind);
return $result;
}
但结果比 sAwnsers 多。 我做错了什么:-o
最佳答案
我不确定你的模式设计是什么,但只是猜测,你对答案的加入应该是这样的Answers.ID
INNER JOIN users ON sAnswers.userID = users.id
INNER JOIN Answers ON sAnswers.FilledAnswers = Answers.ID";
你确定 inner join 会在你的情况下工作吗,也就是说,如果所有的表都被填满,为了安全起见,尝试做 left join
LEFT JOIN users ON sAnswers.userID = users.id
LEFT JOIN Answers ON sAnswers.FilledAnswers = Answers.ID
关于带有用户和答案的 PHP 测验系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50336918/