MYSQL/PHP统计重复问题的答案

MYSQL/PHP统计重复问题的答案,php,mysql,sql,report,Php,Mysql,Sql,Report,我有点困惑我该怎么做。但我会尽力解释清楚 我正在创建一个类似以下内容的报告: 但还有很多问题 所以有很多人回答了这项调查,所有的记录都在数据库中,我需要用它来制作这份报告 我创建了一个查询,该查询从连接多个表中提取所有相关数据,如下所示: 表格 -调查 -调查入口 -调查问题 -调查 -硬件服务 SELECT `surveyEntries`.`ID` AS EntryID, `surveyEntries`.`created` AS

我有点困惑我该怎么做。但我会尽力解释清楚

我正在创建一个类似以下内容的报告:

但还有很多问题

所以有很多人回答了这项调查,所有的记录都在数据库中,我需要用它来制作这份报告

我创建了一个查询,该查询从连接多个表中提取所有相关数据,如下所示:

表格 -调查 -调查入口 -调查问题 -调查 -硬件服务

        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生成这个


如果您需要更多信息,请告诉我。

对于性别报告,您可以使用此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`
对于年龄组报告,与上面类似,只需更改
调查问题
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`

由于您拥有所有数据,我们可以使用
分组方式
,查看每个问题所有唯一答案的计数。为此,我们可以使用以下方法:

SELECT QuestionId, Question, Answer, count(*) 
FROM (PUT YOUR SELECT HERE) 
GROUP BY QuestionId, Answer
然后,它将为您提供每个问题(及其id),以及该问题的唯一答案和唯一答案的计数

或者在您提供的一个选项中完成所有操作:

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\u meta.answer
,将
count(*)作为总数添加到您的
select
中,然后添加
GROUP BY`surveyQuestions`.`ID`,“调查”.“回答”
@Sean你能帮我把这个写进一个答案里吗?我不知道该怎么做。你好,谢谢你的回答。然而,问题远不止性别和年龄组一,我只记下这两个问题,因为它们是不同的选择。所以每个问题要么是答案1要么是答案2,年龄范围是唯一有5个答案可供选择的类型。我该如何处理这个问题?谢谢你,我想这正是我在mysql方面需要的。现在只需要对php执行此操作:),顺便说一句,总数后缺少一个逗号。事实上,即使答案为0,也可以对其进行编辑以显示带有答案的行吗?例如,对于种族,我有5个可能的答案,在本例中,如果选择了4个答案,那么在表中它只显示4个,但我需要它显示5个,并在选项旁边放一个0