我有一个在线研究项目,还有很多选择题。 例如...↓
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 .......
但我觉得它太长了,表现不太好。
所以,请有人能给我一些解决问题的方法吗?
感谢您的建议......
答案 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;