MYSQL/PHP подсчитывает ответы на повторяющиеся вопросы


Я немного смущен тем, как я должен это делать. Но я постараюсь объяснить как можно лучше.

Я создаю отчет, который будет выглядеть примерно так:

enter image description here

Но с гораздо большим количеством вопросов.

Таким образом, несколько человек ответили на этот опрос, и все записи находятся в базе данных, с которой мне нужно работать, чтобы подготовить этот отчет.

Я создал запрос, который извлекает все соответствующие данные из объединения нескольких видимых таблиц ниже:

Таблицы - опрос - Геодезические службы - Опросные вопросы - 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 строки для каждой записи.

enter image description here

enter image description here

Таким образом, это одни и те же вопросы и т.д., но разные записи.

Теперь как я могу это сделать?

И получите число, которое сказало "да", и номер, который сказал "нет" в каждом вопросе, чтобы я мог создать это на php?

ЕСЛИ вам нужна какая-либо дополнительная информация, пожалуйста, дайте мне знать.

Author: Matthew Smart, 2015-07-08

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 в конце

 1
Author: bruceyyy, 2015-07-08 14:08:31

Для ГЕНДЕРНОГО отчета вы можете использовать этот 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`
 0
Author: Agung Santoso, 2015-07-08 13:52:50