mysql数据库包含_mysql 数据库中的三种判断是否包含总结

mysql 数据库中的三种判断是否包含总结

发布时间:2020-08-09 11:36:32

来源:51CTO

阅读:1401

作者:凯哥Java

应用场景:

1:在使用mysql数据库进行存储数据的时候,有时候,一个字段,要存储使用逗号分隔的多个数据,在查询的时候,传递的是一个keyword,需要在逗号分隔的字段中进行查询,这种情况怎么处理?

比如:

在爬虫爬取的时候,指定关键字查询,关键字可以是多个用逗号分隔。数据库中对应的字段是:key_word,存储的数据,比如:凯哥Java,kaigejava这样的。那么现在我要查询的关键字是:凯哥java这样的。怎么查询呢?

2:第二种情况,我们在更新的是,先判断如果指定字段,是否包含指定字符串。如果不包含,在原有字段上添加指定的字段。

比如:

在爬取网站的时候,没有添加http://www. 这个。判断,如果没有添加的,都更新添加http://www. 。这样的如何更新呢?

前期准备:

创建数据库:

CREATE TABLE config_sentiment (

config_sentiment_id varchar(64) NOT NULL COMMENT '舆情配置表-主键id',

config_sentiment_web_name varchar(60) NOT NULL COMMENT '抓取网站名称',

config_sentiment_web_url varchar(500) NOT NULL COMMENT '抓取网站网址',

config_sentiment_item_name varchar(64) NOT NULL COMMENT '项目id',

config_sentiment_rate varchar(5) NOT NULL DEFAULT '1' COMMENT '抓取频率 默认1(1小时)',

config_sentiment_keyword varchar(500) NOT NULL COMMENT '抓取关键字。多个用,分隔',

config_sentiment_newtime varchar(20) DEFAULT NULL COMMENT '最新抓取时间',

config_sentiment_number int(20) DEFAULT NULL COMMENT '最新抓取条数',

config_sentiment_adduser varchar(64) NOT NULL COMMENT '创建人',

config_sentiment_addtime varchar(20) NOT NULL COMMENT '创建时间',

config_sentiment_updateuser varchar(64) DEFAULT NULL COMMENT '更新人',

config_sentiment_updatetime varchar(20) DEFAULT NULL COMMENT '更新时间',

PRIMARY KEY (config_sentiment_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据:

insert into config_sentiment(config_sentiment_id,config_sentiment_web_name,config_sentiment_web_url,config_sentiment_item_name,config_sentiment_rate,config_sentiment_keyword,config_sentiment_newtime,config_sentiment_number,config_sentiment_adduser,config_sentiment_addtime,config_sentiment_updateuser,config_sentiment_updatetime) values ('1','凯哥Java','kaigejava.com','0','1','投资,理财','2018030909572100',10,'88888888','2018030909570021','88888888','2018030909570021'),('2','凯哥Java','kaigejava.com','0','1','百度,天猫','20',10,'88888888','20','88888888','20'),('3','36','kaigejava.com','0','1','理财产品,百度理财,百度理财产品','2018030909570021',10,'88888888','2018030909570021','88888888','2018030909570021');

查看数据:

我们可以看到,url中都没有添加http://。keyword中有多个产品。

争对场景一,解决方案有两个:

1:使用最常用的,模糊查询。sql语句:

like之后,我们发现有两条数据。虽然模糊查询的模糊可前,可后。但是这样的模糊,查询出数据太多了。很多都不是我想要的。

我就想要【理财】这个keyword的数据。这样多数据中精确查询怎么解决?请看下:

解决方案二:

利用MySQL 字符串函数 find_in_set();

具体sql语句:

SELECT t.config_sentiment_web_url url,t.config_sentiment_keyword keyword FROM config_sentiment t WHERE FIND_IN_SET('理财', t.config_sentiment_keyword);

查询后结果:

这样就解决问题了。

争对问题2:更新语句:

UPDATE config_sentiment SET config_sentiment_web_url =CONCAT('http://www.',config_sentiment_web_url) WHERE LOCATE('http://',config_sentiment_web_url)=0;

执行结果:

再次查询看看http://www.是否添加到数据库了。

已经添加上了。问题已经解决。

需要注意的是:在mysql中字符串连接不是使用【+】而是使用【concat函数】

凯哥java(微信id:kaigejava)

本文凯哥个人网站:http://kaigejava.com/article/detail/122

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值