如何在DB中保存多项选择结果,以及如何检索它们

时间:2011-07-08 22:19:26

标签: database-design

我有一个在线研究项目,还有很多选择题。 例如...↓

Q:Which Programming language u like?

1,C

2,C++

3,CSharp

4,VB.NET

5,JAVA

.....

100 , Other

我将所选项目保存为1并取消选择为0

所以DB中的结果就像↓

People      Selected

people1     001000000000000....0

people2     111000000100000....0

people3     001000000000000....1

people4     001000000000000....0

.....

现在,如果我想知道有多少人只选择CSharp

我将创建sql查询为↓

select count(1) as cnt from table where 1=1 

and  substring('Selected', 1, 1) == '0'

and  substring('Selected', 2, 1) == '0'

and  substring('Selected', 3, 1) == '1'

and  .......

但我觉得它太长了,表现不太好。

所以,请有人能给我一些解决问题的方法吗?

感谢您的建议......

1 个答案:

答案 0 :(得分:1)

创建3个表,1个用于人,2个用于语言,3个用于实现前两个之间的多对多关系:
1.用户:id, name, email,....;
2.语言:id, name, description, ....;
3. Users_Languages:user_id, language_id;

当用户喜欢该语言时,将记录插入Users_Languages,然后他不喜欢它,删除记录。 检索很简单:

SELECT u.*, l.name   
 FROM Users u
 INNER JOIN Users_Languages ul ON (ul.user_id = u.id)  
 INNER JOIN Languages l ON (l.id = ul.language_id)
WHERE u.id = 1;