现在有字段:stature、bodytype、income、housing、age 根据这些字段进行筛选数据,并进行匹配率的计算,这个要怎么做啊?希望牛人解决!

解决方案 »

  1.   

    贴建表及插入记录的SQL,及要求结果出来看看
      

  2.   

    什么是匹配率
    根据这些字段进行筛选数据就是写在where条件中吧
    where  stature=? and  bodytype=? and  income=? and housing=? and age=? 
      

  3.   

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

  4.   

    哦,不好意思,第一次发贴
    补一下
    DROP TABLE IF EXISTS `app_makinginfo`;
    CREATE TABLE `app_makinginfo` (
      `id` int(11) NOT NULL auto_increment,
      `userId` int(11) default null,
      `bodytype` varchar(50) collate utf8_unicode_ci default NULL,
      `address` varchar(150) collate utf8_unicode_ci default NULL,
      `bankgroued` varchar(50) collate utf8_unicode_ci default NULL,
      `income` varchar(50) collate utf8_unicode_ci default NULL,
      `housing` varchar(50) collate utf8_unicode_ci default NULL,
      `car` varchar(50) collate utf8_unicode_ci default NULL,
      `vocation` varchar(50) collate utf8_unicode_ci default NULL,
      `hobby` varchar(150) collate utf8_unicode_ci default NULL
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;-- ----------------------------
    -- Records 
    -- ----------------------------
    INSERT INTO `app_makinginfo` VALUES (2,'苗条', '成都春熙路', '大学', '5000', '豪华别墅', '奔驰', '无业游民', '篮球、足球');
    INSERT INTO `app_makinginfo` VALUES (3,'微胖', '北京天安门', '高中', '2000', '破烂茅草屋', '11路', '务农', '游泳');
    根据传入的字段bodytype,address,bankgroued,income,housing,car,vocation,hobby进行筛选排序满足条件多的在排在前,并得到条件满足率;
    比如  传入的字段值分别为 微胖,北京,高中,1000-3000,不限,不限,不限,游泳  则配对率为 100%
      

  5.   

    SET @a1='微胖';
    SET @a2='北京';
    SET @a3='高中';
    SET @a4='1000-3000';
    SET @a5='不限';
    SET @a6='不限';
    SET @a7='不限';
    SET @a8='游泳';
    SELECT *,ROUND(ss/8,2) FROM (
    SELECT *,
    IF(INSTR(bodytype,@a1)>0 OR @a1='不限',1,0)+
    IF(INSTR(address,@a2 )>0 OR @a2='不限',1,0)+
    IF(INSTR(bankgroued,@a3)>0 OR @a3='不限',1,0)+
    IF(income BETWEEN 0+LEFT(@a4,INSTR(@a4,'-')-1) AND RIGHT(@a4,LENGTH(@a4)-INSTR(@a4,'-')) OR @a4='不限',1,0)+
    IF(INSTR(housing,@a5)>0 OR @a5='不限',1,0)+
    IF(INSTR(car,@a6)>0 OR @a6='不限',1,0)+
    IF(INSTR(vocation,@a7)>0 OR @a7='不限',1,0)+
    IF(INSTR(hobby,@a8)>0 OR @a8='不限',1,0) AS ss
     FROM `app_makinginfo`) aa
      

  6.   

    SET @a1='微胖';
    SET @a2='北京';
    SET @a3='高中';
    SET @a4='1000-3000';
    SET @a5='不限';
    SET @a6='不限';
    SET @a7='不限';
    SET @a8='游泳';
    SELECT *,ROUND(ss/8,2) AS 配对率 FROM (
    SELECT *,LENGTH(@a4)-INSTR(@a4,'-'),RIGHT(@a4,LENGTH(@a4)-INSTR(@a4,'-')),
    IF(INSTR(bodytype,@a1)>0 OR @a1='不限',1,0)+
    IF(INSTR(address,@a2 )>0 OR @a2='不限',1,0)+
    IF(INSTR(bankgroued,@a3)>0 OR @a3='不限',1,0)+
    IF(income BETWEEN 0+LEFT(@a4,INSTR(@a4,'-')-1) AND RIGHT(@a4,LENGTH(@a4)-INSTR(@a4,'-')) OR @a4='不限',1,0)+
    IF(INSTR(housing,@a5)>0 OR @a5='不限',1,0)+
    IF(INSTR(car,@a6)>0 OR @a6='不限',1,0)+
    IF(INSTR(vocation,@a7)>0 OR @a7='不限',1,0)+
    IF(INSTR(hobby,@a8)>0 OR @a8='不限',1,0) AS ss
     FROM `app_makinginfo`) aa ORDER BY 配对率 DESC
      

  7.   

    楼主应该测试一下你的SQL语句
    DROP TABLE IF EXISTS `app_makinginfo`;
    CREATE TABLE `app_makinginfo` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `userId` INT(11) DEFAULT NULL,
      `bodytype` VARCHAR(50)  DEFAULT NULL,
      `address` VARCHAR(150)  DEFAULT NULL,
      `bankgroued` VARCHAR(50)  DEFAULT NULL,
      `income` VARCHAR(50)  DEFAULT NULL,
      `housing` VARCHAR(50)  DEFAULT NULL,
      `car` VARCHAR(50)  DEFAULT NULL,
      `vocation` VARCHAR(50)  DEFAULT NULL,
      `hobby` VARCHAR(150)  DEFAULT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=INNODB ;
    INSERT INTO `app_makinginfo` VALUES (NULL,2,'苗条', '成都春熙路', '大学', '5000', '豪华别墅', '奔驰', '无业游民', '篮球、足球');
    INSERT INTO `app_makinginfo` VALUES (NULL,3,'微胖', '北京天安门', '高中', '2000', '破烂茅草屋', '11路', '务农', '游泳');
    SET @a1='微胖';
    SET @a2='北京';
    SET @a3='高中';
    SET @a4='1000-3000';
    SET @a5='不限';
    SET @a6='不限';
    SET @a7='不限';
    SET @a8='游泳';
    SELECT *,ROUND(ss/8,2) AS 配对率 FROM (
    SELECT *,LENGTH(@a4)-INSTR(@a4,'-'),RIGHT(@a4,LENGTH(@a4)-INSTR(@a4,'-')),
    IF(INSTR(bodytype,@a1)>0 OR @a1='不限',1,0)+
    IF(INSTR(address,@a2 )>0 OR @a2='不限',1,0)+
    IF(INSTR(bankgroued,@a3)>0 OR @a3='不限',1,0)+
    IF(income BETWEEN 0+LEFT(@a4,INSTR(@a4,'-')-1) AND RIGHT(@a4,LENGTH(@a4)-INSTR(@a4,'-')) OR @a4='不限',1,0)+
    IF(INSTR(housing,@a5)>0 OR @a5='不限',1,0)+
    IF(INSTR(car,@a6)>0 OR @a6='不限',1,0)+
    IF(INSTR(vocation,@a7)>0 OR @a7='不限',1,0)+
    IF(INSTR(hobby,@a8)>0 OR @a8='不限',1,0) AS ss
      FROM `app_makinginfo`) aa ORDER BY 配对率 DESC