MYSQL/PHP подсчитывает ответы на повторяющиеся вопросы
Я немного смущен тем, как я должен это делать. Но я постараюсь объяснить как можно лучше.
Я создаю отчет, который будет выглядеть примерно так:
Но с гораздо большим количеством вопросов.
Таким образом, несколько человек ответили на этот опрос, и все записи находятся в базе данных, с которой мне нужно работать, чтобы подготовить этот отчет.
Я создал запрос, который извлекает все соответствующие данные из объединения нескольких видимых таблиц ниже:
Таблицы - опрос - Геодезические службы - Опросные вопросы - survey_meta -обзор - hw_сервисы
SELECT
`surveyEntries`.`ID` AS EntryID,
`surveyEntries`.`created` AS EntryDate,
`hw_services`.`name` AS Provider,
`surveyQuestions`.`ID` AS QuestionID,
`surveyQuestions`.`label` AS Question,
`survey_meta`.`answer` AS Answer,
`surveyQuestions`.`parentID` AS ParentQuestion
FROM `survey`
JOIN `surveyQuestions`
ON `survey`.`ID` = `surveyQuestions`.`surveyID`
JOIN `surveyEntries`
ON `survey`.`ID` = `surveyEntries`.`surveyID`
JOIN `survey_meta`
ON (`surveyEntries`.`ID` = `survey_meta`.`entryID` AND `surveyQuestions`.`ID` = `survey_meta`.`questionID`)
JOIN `hw_services`
ON `surveyEntries`.`hw_serviceID` = `hw_services`.`ID`
WHERE `hw_services`.`healthwatchID` = '1'
AND `survey`.`ID` = '1'
AND `surveyQuestions`.`type` IN ('radio', 'dropdown')
AND `hw_services`.`ID` = '1697'
Хорошо, нет, просто чтобы продемонстрировать, что это изображение данных, которые я возвращаю. В опросе всего 30 вопросов, но здесь я просто показываю 4 строки для каждой записи.
Таким образом, это одни и те же вопросы и т.д., но разные записи.
Теперь как я могу это сделать?
И получите число, которое сказало "да", и номер, который сказал "нет" в каждом вопросе, чтобы я мог создать это на php?
ЕСЛИ вам нужна какая-либо дополнительная информация, пожалуйста, дайте мне знать.
2 answers
Поскольку у вас есть все данные, мы можем использовать group by
, чтобы просмотреть количество всех уникальных ответов на каждый вопрос. Для этого мы могли бы использовать что-то вроде следующего:
SELECT QuestionId, Question, Answer, count(*)
FROM (PUT YOUR SELECT HERE)
GROUP BY QuestionId, Answer
Затем вам будет предоставлен каждый вопрос (и его идентификатор) с уникальным ответом на этот вопрос и количеством этого уникального ответа.
Или сделать все это в одном выбранном вами:
SELECT
`surveyEntries`.`ID` AS EntryID,
`surveyEntries`.`created` AS EntryDate,
`hw_services`.`name` AS Provider,
`surveyQuestions`.`ID` AS QuestionID,
`surveyQuestions`.`label` AS Question,
`survey_meta`.`answer` AS Answer,
count(*) as Total,
`surveyQuestions`.`parentID` AS ParentQuestion
FROM `survey`
JOIN `surveyQuestions`
ON `survey`.`ID` = `surveyQuestions`.`surveyID`
JOIN `surveyEntries`
ON `survey`.`ID` = `surveyEntries`.`surveyID`
JOIN `survey_meta`
ON (`surveyEntries`.`ID` = `survey_meta`.`entryID` AND `surveyQuestions`.`ID` = `survey_meta`.`questionID`)
JOIN `hw_services`
ON `surveyEntries`.`hw_serviceID` = `hw_services`.`ID`
WHERE `hw_services`.`healthwatchID` = '1'
AND `survey`.`ID` = '1'
AND `surveyQuestions`.`type` IN ('radio', 'dropdown')
AND `hw_services`.`ID` = '1697'
GROUP BY `surveyQuestions`.`ID`, `survey_meta`.`answer`
Где я добавил count(*)
в начальный выбор и GROUP BY surveyQuestions.ID, survey_meta.answer
в конце
Для ГЕНДЕРНОГО отчета вы можете использовать этот sql
SELECT
`survey_meta`.`answer` AS Gender,
COUNT(*) AS 'Total Answer'
FROM `survey`
JOIN `surveyQuestions`
ON `survey`.`ID` = `surveyQuestions`.`surveyID`
JOIN `surveyEntries`
ON `survey`.`ID` = `surveyEntries`.`surveyID`
JOIN `survey_meta`
ON (`surveyEntries`.`ID` = `survey_meta`.`entryID` AND `surveyQuestions`.`ID` = `survey_meta`.`questionID`)
JOIN `hw_services`
ON `surveyEntries`.`hw_serviceID` = `hw_services`.`ID`
WHERE `hw_services`.`healthwatchID` = '1'
AND `survey`.`ID` = '1'
AND `surveyQuestions`.`type` IN ('radio', 'dropdown')
AND `hw_services`.`ID` = '1697'
AND `surveyQuestions`.`ID` = 9
GROUP BY `survey_meta`.`answer`
Для отчета по ВОЗРАСТНОЙ ГРУППЕ, аналогичного приведенному выше, просто измените surveyQuestions
.ID
. Таким образом, код будет выглядеть следующим образом
SELECT
`survey_meta`.`answer` AS Gender,
COUNT(*) AS 'Total Answer'
FROM `survey`
JOIN `surveyQuestions`
ON `survey`.`ID` = `surveyQuestions`.`surveyID`
JOIN `surveyEntries`
ON `survey`.`ID` = `surveyEntries`.`surveyID`
JOIN `survey_meta`
ON (`surveyEntries`.`ID` = `survey_meta`.`entryID` AND `surveyQuestions`.`ID` = `survey_meta`.`questionID`)
JOIN `hw_services`
ON `surveyEntries`.`hw_serviceID` = `hw_services`.`ID`
WHERE `hw_services`.`healthwatchID` = '1'
AND `survey`.`ID` = '1'
AND `surveyQuestions`.`type` IN ('radio', 'dropdown')
AND `hw_services`.`ID` = '1697'
AND `surveyQuestions`.`ID` = 10
GROUP BY `survey_meta`.`answer`