首先问题描述:我现在有两个表,一个表是关键词,一个表是含有关键词的标签,需要做的就是在关键词表中新建一个标签字段,把包含该关键词的全部标签存入其中。比如关键词是Java,标签可能有Java开发,Java后台等。我这里关键词有4000个,标签有40000个,我用了小段java代码+sql的函数就完成了。
基本思想:对于给定的关键词,把包含关键词的标签筛选出来,然后存到一张表里,再把该表的结果一条条读出,存放到关键词表的字段里去。想法比较简单,涉及到一些sql操作可以了解一下。
步骤1:读取关键词和对应ID,(ID是更新时需要,也可以根据关键词更新):
String sql = "select keyword,id from 表名";
ResultSet queryResult = DBUtil.queryRDBdata(sql);
while (queryResult.next()) {
String word = queryResult.getString("keyword");
int id=queryResult.getInt("id");
}
步骤2:筛选出包含关键词(word变量)的标签存入表b,这是一个临时的表
String sql0 = "CREATE table b SELECT concat_ws(':',label,count) from 表名 where label like \"%" + word + "%\"";
步骤3:将表b中的数据一条条读出,存放到变量label中
String sql1 = " select label from b ";
ResultSet queryResult = DBUtil.queryRDBdata(sql1);
while (queryResult.next()) {
String a = queryResult.getString("label");
label=label+a+",";
}
本来在sql中有可以拼接字符串的函数,就是可以用sql函数把多条标签拼到一起,存入一个字段值中,就是使用concat函数,用法是concat(字段名,字符串),还可以按指定格式拼接concat_ws(“拼接符”,字段名,字符串),但是这个函数有长度限制,所以这里我是直接用的java的字符串拼接。
步骤4:将变量label存入到对应word的标签字段,我是根据ID来对应更新的
" UPDATE 表名 set label ='" + label + "'WHERE id ='" + id + "'";
完美over