求个类似于电影网站的sql语句
1 标示动作片
2 标示爱情片
4 标示灾难片
8 标示故事片
16标示科幻片3 标示爱情片 +动作片
22 标示 科幻片 + 灾难片 + 爱情片如何写sql的查询语句 查询出 所有符合 某一类的片子。

解决方案 »

  1.   

    贴建表及插入记录的SQL,及要求结果出来看看
    递归查询?
      

  2.   

    表就类似于这样的字段:id,name,class
    其中class的内容就是就是上面列举的
      

  3.   

    呵呵,没有明白
    贴建表及插入记录的SQL,及要求结果出来看看
      

  4.   

    id name class
    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)
      

  5.   

    select * from tt where instr(class,'2')>0
      

  6.   

    表结构这样设计,如果数据量大的话,会有问题的
    个人认为应该把这个类型字段拆成多个字段,例如 isLove(是否为爱情片), isAction(是否为动作片),等等
      

  7.   

    本帖最后由 ACMAIN_CHM 于 2013-11-11 19:50:02 编辑
      

  8.   


    如果我搜索分类class标示爱情片的2
    select * 
    from table1
    where find_in_set(2,replace(class,'+',",'));如果我搜索分类class标示灾难片的4
    select * 
    from table1
    where find_in_set(4,replace(class,'+',",'));
      

  9.   

    老大,你没有理解class字段的内容含义啊
      

  10.   

    如果能有将class字段的值转换为1,2,4,8的方法,这个问题就解决了
      

  11.   

    你的意思是要将class中的21分解成16+4+1?
    21的组成数字有多少种?
    这是算法问题了
      

  12.   

    参考wordpress的设计吧,建立标签,用标签关联,容易维护,查询负载小。
      

  13.   


    还可以考虑sphinx建立索引。
      

  14.   

    算法只有一种,就是
    id num
    1 1
    2 2
    3 4
    4 8
    5 16
    6 32
    7 64
    8 128
    9 256
    10 512 ...........
      

  15.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  16.   

    1 我要用的就是查询的where 后面的
    2 同上
    3 5楼我已列出
    4 我发的板块是mysql的
      

  17.   

    1 我要用的就是查询的where 后面的
    2 同上
    3 5楼我已列出
    4 我发的板块是mysql的
    也就是说需要俺自己准备测试数据来模拟?
      

  18.   

    这是算法问题,在SQL中无法解决,只有在语言代码中解决
      

  19.   

    & 与运算即可
    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 |
    +----+------+-------+
      

  20.   

    class &4 的结果,要么是4,要么就是0
    为4说明是灾难片,为0说明不是灾难片。class &3 的结果,可能是 0,1,2,3
    为0说明3里的任何一种片,不为0说明是其中的一种或多种片。
    为3说明包含3里的全部类型