我有一张桌子1:
和表2:
每个问题可以有多个选择(例如:questionId 1有两个选择选择1和2)。
我有一个表单,允许用户选择这样的多个选项:
还有一个答案表:
现在我的问题是:我想根据选择形成一个SQL查询并显示所选答案的数量。(例如:我想要将性别作为女性和教育作为1级的答案数)。我该怎么做?
我试过这样的事情:
select * from answers where (questId =2 and choiceIndex='2.0000') and (questId =3 and choiceIndex='1.0000') and someId=72
此查询不会给我正确的计数,因为相同的choiceIndex可以存在用于不同的选择。
我怎样才能做到这一点?用户也可以从表单中选择多个选项,这样我可以通过哪种方式动态生成SQL查询吗?
Eidt
感谢@Marc Gravell提供的解决方案。它帮助了很多。现在,一旦我实现了这一点,我想在我的查询中包含算术运算符。 (例如:我希望将性别作为女性+
教育的答案数量作为1年级-
等级的 select ((select COUNT(*) from answers where (questId =2 and answer='1.0000') and someId=72) +
(select COUNT(*) from answers where (questId =3 and answer='1.0000') and someId=72))
教育。
我可以在查询中包含算术运算符(+, - ,*,/,%,count,average)吗?
场景:我设计了一个表单,用户可以在其中根据数据库值生成公式。 (例如:用户将选择choice1 [female] + choice2 [grade 1] * choice3 [grade3]并生成公式将保存在DB中以供进一步使用)
我试过这样:
{{1}}
在这个查询中,我试图对两个select语句执行add操作。我可以用同样的方式做*,/,百分比等吗?
有更好的方法吗?
答案 0 :(得分:1)
choiceIndex
永远不会同时成为2.0000
和1.0000
;因此,我认为你的意思是:
select * from answers where (
(questId=2 and choiceIndex='2.0000') or
(questId=3 and choiceIndex='1.0000')
) and someId=72
请注意,如果您要根据输入值构建查询,则应该对其进行参数化,因此它最终会显示为:
select * from answers where (
(questId=@questId0 and choiceIndex=@choiceIndex0) or
(questId=@questId1 and choiceIndex=@choiceIndex1)
) and someId=@someId
添加了带有值的参数:
@questId0
=> 2
@questId1
=> 3
@choiceIndex0
=> '2.0000'
@choiceIndex1
=> '3.0000'
@someId
=> 72