Как сравнить два ответа в php? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть две таблицы в базе данных, Вопросы и user_answers обе, имеют поле questionId . Я хочу сравнить, если пользователь ответил на все вопросы в questions . Каждый раз, когда пользователь отвечает на вопрос, в таблицу user_answers добавляется новая строка с userId его учетной записи и questionId вопроса, который он просто задает. ответил. Я думал о сравнении, если пользователь userId в таблице user_answers ответил на все questionId таблицы questions . Надеюсь, я хорошо объяснил эту концепцию.

Я думал о создании запроса к таблице questions и о том, что он возвращает массив со всеми questionId , и сделать еще один запрос к таблице user_answers со всеми questionId , связанными с пользователем userId , который был зарегистрирован в данный момент.

Я пытался что-то сделать, но я не знаю, как продолжить:

<?php
session_start();

include 'connection.php';
include 'URLS.php';

$question_sql = "SELECT questionId FROM questions;";
$question_result = mysqli_query($connection, $question_sql);
$question_row = mysqli_fetch_array($pregunta_result);

$answer_sql = "SELECT questionId FROM user_answers WHERE userId = `$_SESSION['userId']`";
$answer_result = mysqli_query($connection, $answer_sql);
$answer_row = mysqli_fetch_array($answer_result);
?>

Я не знаю, как получить массив со всеми questionId , извините, я ' м совершенно новый для php. Если кто-то может придумать лучший метод, чем сравнение двух массивов, я был бы признателен.

Я собирался задать этот вопрос в другом посте, но так как это короткий вопрос ... Как только я получу два массивы, как я могу сравнить, какой questionId , на который пользователь не ответил? Например, если questionId из вопрос равен [1, 2, 3, 4, 5] и userId 1 ответил на [2, 4, 5], как его сохранить в другом массиве [1, 3]? Может быть с array_diff()?

Извините, что задаю этот длинный вопрос, но я немного отчаялся. Заранее спасибо.

Пример

таблица вопросов

question_id: [1, 2, 3, 4, 5, 6, 7] (Каждый номер - это отдельный вопрос)

таблица users_answers

user_id: [247] (пользователь вошел в систему)

question_id: [1, 3, 5, 6] (вопросы, на которые отвечает пользователь)

Каждое число в массиве - это отдельная строка

Итак, я хочу что-то получить как $unanswered_questions = [2, 4, 7]

Изображения базы данных

таблица вопросов

(Извините, вопросы на испанском языке sh, но важная вещь questionId)

таблица вопросов

таблица user_answers

Например, userId 1 ответил на вопросы 1, 2 и 3, и он должен ответить на вопросы 5 и 6. Как я могу получить вопрос, на который он должен ответить?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Я понял, как получить неотвеченные вопросы от userId 1, все довольно просто:

SELECT questionId FROM questions EXCEPT SELECT questionId FROM user_answers;
0 голосов
/ 24 апреля 2020

Похоже, что оператор Left Outer JOIN будет лучше для вас, чем 2 запроса, которые вы используете. Вы можете использовать следующее, чтобы получить идентификаторы вопросов и вопросов, на которые нет ответов:

SELECT questions.questionId, questions.question
FROM questions
LEFT JOIN user_answers
ON questions.questionId = user_answers.questionId
WHERE user_answers.questionId is NULL;

Или используйте это, чтобы собрать все вопросы с ответами:

SELECT *
FROM questions
JOIN user_answers
ON questions.questionId = user_answers.questionId;

Или добавить где ему искать конкретного пользователя c:

SELECT *
FROM questions
JOIN user_answers
ON questions.questionId = user_answers.questionId
WHERE questions.userId = `mysql_real_escape_string($_SESSION['userId'])`;

Если я понимаю вашу схему, это должно дать вам все вопросы без ответов.

Если найдете это post - отличный ресурс для операторов JOIN, если вам нужна дополнительная информация о них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...