日期:2014-05-16  浏览次数:20926 次

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

------解决方案--------------------
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
 
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。


------解决方案--------------------
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
------解决方案--------------------
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
------解决方案--------------------
浪费时间!你所谓的测试数据自己试过吗?!

引用mysql> 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`)
-> ) ;
ERROR 1067 (42000): Invalid default value for 'hobby'
mysql> CREATE TABLE `app_makinginfo` (
-> `id` int(11) NOT NULL auto_increment,
-> `userId` int(11) default null,
-> `bodytype` varchar(50) ,
-> `address` varchar(150) ,
-> `bankgroued` varchar(50) ,
-> `income` varchar(50) ,
-> `housing` varchar(50) ,
-> `car` varchar(50) ,
-> `vocation` varchar(50) ,
-> `hobby` varchar(150)
-> PRIMARY KEY (`id`)
-> ) ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '(`id`