有两个表用户和user_demographics
用户具有的基本结构(确实有更多字段,但这里不需要)
id name email gender age ethnicity
1 test1 test1@test.com 1 1 1
2 test2 test2@test.com 1 2 1
3 test3 test3@test.com 2 3 2
4 test4 test4@test.com 3 1 1
5 test5 test5@test.com 2 4 5
**Gender**:
1 - Male,
2 - Female,
3 - Prefer not to say
**Age**:
1 - 16-20,
2 - 21-24,
3 - 25-30,
4 - 31-24
**Ethnicity**:
1 - White,
2 - Black,
5 - Prefer not to say等等,目前大约有1000个用户。
user_demographics结构为
coreid,type,选项(为了这个问题,“type”将是文本,只是为了让它更清晰)
coreid, type option
1 gender 1
1 gender 2
1 age 1
1 age 3
1 ethnicity 1
2 gender 2
2 gender 3
2 age 3
3 gender 1在基于网络的表单上,我有3组复选框列表,每个选项都有一个--性别、年龄、种族和用户可以从每个选项中选择多个。他们单击update,这些详细信息存储在mysql数据库中,如前所述。coreid与另一个表相关,但此处不相关。
我要做的是得到每个核心模块的用户总数,而不管它是哪种类型。选择的选项越多,计数就越小。所以coreid 3应该有最大的计数,因为我只选择了一个选项。
例如: coreid 3正在选择所有男性。
例如: coreid 2选择所有(女性和“不愿意说”)和年龄范围25-30。
在如何创建一个能给我所需结果的单一查询上挣扎,希望这是有意义的。
整个系统背后的思想是,我们有一个大的表单,用户填写并存储在用户表中的信息。然后,管理团队的一名成员可以通过从我们收集的各种人口统计学信息中选择选项,来选择这些用户。因此,他们可能只想看到每一个选择了“男性”和“不愿意说”性别选项的人。另一个管理员可能会进去说,他们想要所有的男性,年龄在25-30岁之间。或者他们可以在性别下选择所有的选项。想法是,他们可以选择任何组合,并得到一个结果的列表。在这一分钟,我只需要得到一个计数,为组合选择。
发布于 2019-04-03 13:09:07
听起来,您可能需要使用动态SQL,在动态SQL中实际构建动态SQL查询,然后执行该查询。另外,为了澄清我认为你在问什么,如下所示。CoreID就像一组过滤器,某些管理人员对获取特定用户的计数和详细信息感兴趣。他们对
EITHER gender condition (1 or 2) 任何一个年龄条件(1或3)和仅仅一个种族
可能是针对那些可能会影响人口统计的产品。因此,您可以预先查询CoreID =1的每条记录,然后开始构建查询。您可能希望按类型排序查询,以分组常见项目,如性别、年龄、种族类别。
然后,在您的本地化代码(如C#、VB、java等)中,您将需要构建查询,使您插入或位于同一类别中的查询符合逻辑,并且在不同的类别之间,例如
where
( Gender = 1
OR Gender = 2 )
AND ( Age = 1
OR Age = 3 )
AND ( Ethnicity = 1 )如果您试图编写为MySQL存储过程,则它将是一种动态SQL查询.无论哪种方式,WHERE子句都需要根据某些人正在寻找的核心标准构建。
您是正确的,最后一个是最简单的,因为CoreID =3将是一个简单的
WHERE ( Gender = 1 )澄清语言来源,我或其他人可能可以提供额外的指导,但如果我是准确的,你应该尝试写自己的第一次通过的代码,但我会为你打出一个伪代码,如下
获取为一个CoreID排序的记录,按标准类型排序。
prep variable identifying if pending open Parenthesis
prep variable identifying last "type" building for.
for each record
If new type
if has Open Parenthesis
add closing paren
add logical AND before the next entry we are getting
add open parenthesis
set flag we have open parenthesis
else
since same type as last type, add logical OR
go to next record, repeat.
If after last record we would always need to close parenthesis even if a single criteriahttps://stackoverflow.com/questions/55493474
复制相似问题