Попробую объяснить свою проблему, извините за плохой английский :)
Я занят системой викторин.
Итак, какие столы нравятся:
- 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
Ответы. Хорошо - это как 0 = Не хорошо / 1 = Хорошо.
Что это значит, я получаю все отправленные ответы с именем пользователя и нахожу, хорошие ответы - да или нет.
Я пытался:
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";
Вы уверены, что внутреннее соединение будет работать в вашем случае, т.е. если все таблицы заполнены, попробуйте выполнить левое соединение, чтобы быть в безопасности
LEFT JOIN users ON sAnswers.userID = users.id
LEFT JOIN Answers ON sAnswers.FilledAnswers = Answers.ID
Я согласен, исходя из того, что было показано в вопросе, похоже, что это должен быть Answers.ID.
Я пробовал. Но чем это показывает слишком много результатов. Если кто-то отвечает на 3 вопроса, и я смотрю результаты, я получаю 9 строк. Это означает, что там 3 вопроса и два ответа, а это 9. Но я хочу показать только 3 отправленных ответа.
См. Почему я должен предоставлять MCVE для того, что мне кажется очень простым SQL-запросом