现在有一个问题要请教一下高手。比如说我现在有下面这么一个模型,总的是五维的情况。分努力程度,个人兴趣,学校方法,英语基础还有通过情况。
             学生Aijk ,   个人努力程度c1,vijk1                 R1
                           个人兴趣c2,vijk2  R2
Rijk  =                    学习方法c3,vijk3         =           R3
                           英语基础c4,vijk4                     R4
                           通过情况c5,vijk5  R5其中,各维情况又分下面括号里面的情况。
      V1(c1)={不努力,一般,很努力}
      V2(c2)={没兴趣,一般,非常感兴趣}
      V3(c3)={没效率,一般,非常有效率}
      V4(c4)={差,中,良,优}
      V5(c5)={通过,未通过}所以,我设计的数据库的表是这样子的:
   编号   个人努力程度    个人兴趣    学习方法   英语基础    通过情况
     1         不努力        一般       一般         良       未通过
     2         很努力    非常感兴趣     一般         良         通过

   下面的数据和上面的差不多。那我怎么统计里面的数据情况。
   比如说我分一维的情况,就有3+3+3+4=13种
   二维的就有:
   三维。
   四维就是:3×3×3×4=108种
并且这些分维的情况都要从数据库里面读出统计的数量。
  比如说我们找一维,个人努力程度是“不努力”的,那就查询表里面有多少个是个人努力程度是“不努力”,返回数量。
   二维的话,我们找个人兴趣是“一般”,学习方法是“良”,那我们也上去查找得出数量。
  
   后面三维、四维的情况类似但是,就是全部情况都要考虑,并且要分维数考虑的。不知道有哪位高手能提供一下好的方法啊,跪谢了。

解决方案 »

  1.   

    不会是这样吧
    SELECT * FROM XXXXX WHERE 条件1 AND 条件2 AND 条件3 AND 条件4 AND 条件5 有几个条件 你就AND几个呗 如果只统计数量那就把*换成COUNT(*)就行了
      

  2.   

    比如说个人努力程度吧,我分V1(c1)={不努力,一般,很努力}三种情况,那我就要找出
    select conut(*) from ***** where 个人努力程度 = '不努力'
    select conut(*) from ***** where 个人努力程度 = '一般'
    select conut(*) from ***** where 个人努力程度 = '很努力'
    这样三种情况。这样是一维的情况。
    如果说二维的话,那我就要添多一个条件的了。比如添多个人兴趣吧
    有V2(c2)={没兴趣,一般,非常感兴趣},那么分的情况就有:
    select conut(*) from ***** where 个人努力程度 = '不努力' and 个人兴趣 = '没兴趣'
    select conut(*) from ***** where 个人努力程度 = '不努力' and 个人兴趣 = '一般'
    select conut(*) from ***** where 个人努力程度 = '不努力' and 个人兴趣 = '非常感兴趣'下面的情况就类似这样的啊也算是组合问题吧
      

  3.   

    StringBuffer sql = new StringBuffer("SELECT * FROM XXXXXX WHERE 1=1");
    if(条件1成立){
      sql.append(" AND 条件1的查询条件");
    }
    if(条件2成立){
      sql.append(" AND 条件2的查询条件");
    }
    if(条件3成立){
      sql.append(" AND 条件3的查询条件");
    }
    if(条件4成立){
      sql.append(" AND 条件4的查询条件");
    }
    if(条件5成立){
      sql.append(" AND 条件5的查询条件");
    }         
    String search = sql.toString();
    search 就是最后组合成的SQL语句 差不多吧
      

  4.   

    但是这样没有办法囊括全部情况啊。
    比如吧,条件1 分:A1,B1,C1三种情况。
            条件2 分:A2,B2,C2三种
            条件3 分:A3,B3,C3三种
            条件4 分:A4,B4,C4,D4四种。
    如果是一维的情况呢,就是从条件1到条件4中随便找一个出来,比如我们找条件2,那么条件2又分A2,B2,C2,所以我们必须考虑这三种情况。如果我们找条件4查询,就要分A4,B4,C4,D4四种了。如果我们去二维的话呢,就是从里面找两个条件出来。如果我们选择的是条件1和条件2,那么组合的情况就有:A1和A2,A1和B2,A1和C2,B1和A2,B1和B2,B1和C2,C1和A2,C1和B2,C1和C2这么多情况的了三维的话就更多,然后到四维就是要这么把全部的情况都找出来的哦
      

  5.   

    你可能需要从外面传进来的变量进行查询 那这样下面5个String参数分别表明传进来的对应5个字段的5个查询条件
    public int countResult(String s1,String s2,String s3,String s4,String s5){
      ......
      ......
      StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM XXXXXX WHERE 1=1");
      if((!s1.equals(""))||s1!=null){   //如果第一个查询条件不为空那就添加查询条件 下同
        sql.append(" AND 个人努力程度='");
        sql.append(s1);
        sql.append("'");
      }
      if((!s2.equals(""))||s2!=null){ 
        sql.append(" AND 个人兴趣='");
        sql.append(s2);
        sql.append("'");
      }
      if((!s3.equals(""))||s3!=null){ 
        sql.append(" AND 学习方法='");
        sql.append(s3);
        sql.append("'");
      }
      if((!s4.equals(""))||s4!=null){ 
        sql.append(" AND 英语基础='");
        sql.append(s4);
        sql.append("'");
      }
      if((!s5.equals(""))||s5!=null){ 
        sql.append(" AND 通过情况='");
        sql.append(s5);
        sql.append("'");
      }         
     String search = sql.toString();
     ......
     ......
    }
      

  6.   

    上面的程序只管判断对应的字段是否有查询条件 如果有就添加 因为sql.append(s1);这句是添加的变量 所以不管你前台传过来什么 都可以查询
      

  7.   

    哈 谢谢楼主啦 可算到3个绿裤衩了 这1个星期多没白混 HOHO~
      

  8.   

    纠正一下 上面程序里if((!s1.equals(""))||s1!=null)
    应换成if(s1!=null && !s1.equals(""))