我有3个表用于“测验”类型的应用程序。
Quizes:
ID | start_date |quiz_name | type
-----------------------------------------
1 | 2017-06-08 | Places | chooseAndInput
2 | 2017-06-05 | Things | input
3 | 2017-05-31 | Shapes | chooseOne
附件:
ID | quiz_id | image_path |
--------------------------------
14 | 1 | /img1.jpg |
15 | 1 | /img1-B.jpg |
16 | 2 | /img2.jpg |
17 | 3 | /foo.jpg |
18 | 3 | /bar.jpg |
19 | 3 | /baz.jpg |
对策:
ID | user_id | quiz | choice | input
-------------------------------------------------------
21 | 681 | 1 | 15 | "lorem Ipsum"
22 | 12 | 2 | | "lorem Ipsum"
23 | 231 | 2 | | "lorem Ipsum"
24 | 33 | 1 | 14 | "Lorem ipsum"
25 | 43 | 3 | 17 |
26 | 123 | 3 | 18 |
测验可以包含一个或多个图像,可以是三种类型之一,仅输入用户为图像写入响应,选择用户在多个图像之间选择的图像,或选择一个并输入用户所在的位置两者。
我现在需要从响应中提取数据。我想提供一些数据点:总响应,每个选项的总数#(用于选择测验),用户输入(用于inputOnly测验),以及用户输入按选择分组,每个选项的总数#(用于chooseAndInput测验)。
如何在最少的查询数量中获取最后一个数据集(#选择每个选项的#和按选择分组的输入)。
编辑:尝试以及他们出错的原因。 (:campaignID =我所在的广告系列页面的PHP var)
SELECT * from `Responses` r join `Attachments` a on a.quiz_id = r.quiz where r.CampaignId = :campaignId"
这给了我所有的选择和输入的响应,但是我需要这些选择的分组(x个用户选择y,这里是按y分组的输入)。所以我试过了:
SELECT * from `Responses` r join `Attachments` a on a.quiz_id = r.quiz where r.CampaignId = :campaignId" and r.choice = **choice 1**
我将为每个选项重复一次,但后来我意识到我不知道如何在没有首先查询它们的情况下提供这些选项