Я пытаюсь найти всех клиентов, которые ответили «Facebook» на вопрос «платформа» (id 1)
у каждого клиента есть анкеты, и я пытаюсь посмотретьдля клиентов, которые ответили «facebook» на вопросы «платформа», идентификатор вопросов фиксирован, например, «платформа», идентификатор в таблице вопросов равен 1, «возраст» равен 2 и т. д. Каждый вопросник имеет различный набор вопросов, например, например, идентификатор вопросника.1 содержит вопрос «платформа», но ответ будет вводиться через поле выбора, а не текстовое поле (таким образом, имеется необходимость в таблице answer_option), а идентификатор вопросника 2 может не иметь платформы вопроса и т. Д. Параметры, которые будут поступать с экрана поиска,идентификатор анкеты и текст, который отвечает на вопрос «платформа».
сейчас это то, что у меня есть до сих пор ..
SELECT customers.* FROM customers
INNER JOIN questionnaire_answers
ON questionnaire_answers.answerable_id = customers.id
AND questionnaire_answers.answerable_type = 'Customer'
INNER JOIN questionnaires
ON questionnaires.id = questionnaire_answers.questionnaire_id
INNER JOIN questions
ON questions.questionnaire_id = questionnaires.id
INNER JOIN answers
ON answers.question_id = questions.id
INNER JOIN answer_options
ON answer_options.id = answers.answer_option_id
WHERE (questions.id = 1 and answers.answer LIKE '%facebook%');
, если вы заметите, вопрос.id будет всегда1, потому что я просто ищу ответы на платформе, это особая функция моего экрана.Я попробовал это с 1 - 20 строками данных, но это работает, но если данные становятся больше, чем 20 000 строк, они никогда не возвращают запись, которую я уже пробовал, с реальными данными, которые запрос требует навсегда, что мне нужно было отменить.Поскольку идентификатор вопроса уже постоянен, а идентификатор вопросника исходит из параметра поиска, я думаю, возможно, мне не нужно присоединять ненужную таблицу, и я не думаю, что размещение индекса поможет, потому что у меня есть параметр с подстановочными знаками? (Не уверен), но я не могу понять, как.
пример данных и ожидаемый результат
Customer:
id:1,
family_name: "smith",
first_name: "smith",
..
Customer:
id:2,
family_name: "david",
first_name: "david",
..
QuestionnaireAnswer:
id: 20199,
questionnaire_id: 4,
answerable_type: "Customer",
answerable_id: "1",
QuestionnaireAnswer:
id: 20200,
questionnaire_id: 5,
answerable_type: "Customer",
answerable_id: "2",
Questionnaire:
id: 4,
name: "Survey for Psychology Students",
group_code: "10",
Questionnaire:
id: 5,
name: "Survey for Students",
group_code: "10",
Question:
id: 1,
name: "platform",
answer_type: "08", //selectbox
default_text: nil,
sequence: 1,
question_valid: true,
disabled: false,
questionnaire_id: 5,
...
Question:
id: 2,
name: "school",
answer_type: "01", //textbox
default_text: nil,
sequence: 2,
question_valid: true,
disabled: false,
questionnaire_id: 5,
...
Question:
id: 3, // I said the the id for platform is fixed but this time this question is textbox inputted so it is different
name: "platform",
answer_type: "01", //text
default_text: nil,
sequence: 1,
question_valid: true,
disabled: false,
questionnaire_id: 5,
...
Question:
id: 4,
name: "town",
answer_type: "01", //textbox
default_text: nil,
sequence: 2,
question_valid: true,
disabled: false,
questionnaire_id: 4,
...
Answer:
id: 1,
question_id: 3,
answer_option_id: nil,
answer: "facebook",
questionnaire_answer_id: 19585,
created_at: Wed, 13 Feb 2019 21:43:15 JST +09:00,
updated_at: Wed, 13 Feb 2019 21:43:15 JST +09:00,
member_id: nil>,
Любая помощь будет оценена.