求个类似于电影网站的sql语句
1 标示动作片
2 标示爱情片
4 标示灾难片
8 标示故事片
16标示科幻片3 标示爱情片 +动作片
22 标示 科幻片 + 灾难片 + 爱情片如何写sql的查询语句 查询出 所有符合 某一类的片子。
1 标示动作片
2 标示爱情片
4 标示灾难片
8 标示故事片
16标示科幻片3 标示爱情片 +动作片
22 标示 科幻片 + 灾难片 + 爱情片如何写sql的查询语句 查询出 所有符合 某一类的片子。
递归查询?
其中class的内容就是就是上面列举的
贴建表及插入记录的SQL,及要求结果出来看看
1 aaa 21 (16+4+1)
2 bbb 18 (16+2)
3 ccc 1 (1)
4 ddd 2 (2)
5 eee 7 (4+2+1)
6 fff 11 (8+2+1)
7 ggg 6 (4+2)class是分类的字段
括号里的数字是包含的分类的说明
分类为
1 标示动作片
2 标示爱情片
4 标示灾难片
8 标示故事片
16标示科幻片如果我搜索分类class标示爱情片的2
那么结果就有
id name class
2 bbb 18 (16+2)
4 ddd 2 (2)
5 eee 7 (4+2+1)
6 fff 11 (8+2+1)
7 ggg 6 (4+2)如果我搜索分类class标示灾难片的4
那么结果就有
id name class
1 aaa 21 (16+4+1)
5 eee 7 (4+2+1)
7 ggg 6 (4+2)
个人认为应该把这个类型字段拆成多个字段,例如 isLove(是否为爱情片), isAction(是否为动作片),等等
如果我搜索分类class标示爱情片的2
select *
from table1
where find_in_set(2,replace(class,'+',",'));如果我搜索分类class标示灾难片的4
select *
from table1
where find_in_set(4,replace(class,'+',",'));
21的组成数字有多少种?
这是算法问题了
还可以考虑sphinx建立索引。
id num
1 1
2 2
3 4
4 8
5 16
6 32
7 64
8 128
9 256
10 512 ...........
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
2 同上
3 5楼我已列出
4 我发的板块是mysql的
2 同上
3 5楼我已列出
4 我发的板块是mysql的
也就是说需要俺自己准备测试数据来模拟?
select * from table1
+----+------+-------+
| id | name | class |
+----+------+-------+
| 1 | aa | 12 |
| 2 | bb | 21 |
| 3 | cc | 3 |
| 4 | dd | 9 |
+----+------+-------+
想查灾难片
则 class & 4 不为 0
select * from table1 where class&4 <>0;
+----+------+-------+
| id | name | class |
+----+------+-------+
| 1 | aa | 12 |
| 2 | bb | 21 |
+----+------+-------+想查3 爱情片 且 动作片
select * from table1 where class&3 =3;
+----+------+-------+
| id | name | class |
+----+------+-------+
| 3 | cc | 3 |
+----+------+-------+想查3 爱情片 或 动作片
select * from table1 where class&3 <> 0;
+----+------+-------+
| id | name | class |
+----+------+-------+
| 2 | bb | 21 |
| 3 | cc | 3 |
| 4 | dd | 9 |
+----+------+-------+
为4说明是灾难片,为0说明不是灾难片。class &3 的结果,可能是 0,1,2,3
为0说明3里的任何一种片,不为0说明是其中的一种或多种片。
为3说明包含3里的全部类型