您好,登錄后才能下訂單哦!
應(yīng)用場景:
1:在使用mysql數(shù)據(jù)庫進(jìn)行存儲數(shù)據(jù)的時候,有時候,一個字段,要存儲使用逗號分隔的多個數(shù)據(jù),在查詢的時候,傳遞的是一個keyword,需要在逗號分隔的字段中進(jìn)行查詢,這種情況怎么處理?
比如:
在爬蟲爬取的時候,指定關(guān)鍵字查詢,關(guān)鍵字可以是多個用逗號分隔。數(shù)據(jù)庫中對應(yīng)的字段是:key_word,存儲的數(shù)據(jù),比如:凱哥Java,kaigejava這樣的。那么現(xiàn)在我要查詢的關(guān)鍵字是:凱哥java這樣的。怎么查詢呢?
2:第二種情況,我們在更新的是,先判斷如果指定字段,是否包含指定字符串。如果不包含,在原有字段上添加指定的字段。
比如:
在爬取網(wǎng)站的時候,沒有添加http://www. 這個。判斷,如果沒有添加的,都更新添加http://www. 。這樣的如何更新呢?
前期準(zhǔn)備:
創(chuàng)建數(shù)據(jù)庫:
CREATE TABLE config_sentiment
(config_sentiment_id
varchar(64) NOT NULL COMMENT '輿情配置表-主鍵id',config_sentiment_web_name
varchar(60) NOT NULL COMMENT '抓取網(wǎng)站名稱',config_sentiment_web_url
varchar(500) NOT NULL COMMENT '抓取網(wǎng)站網(wǎng)址',config_sentiment_item_name
varchar(64) NOT NULL COMMENT '項目id',config_sentiment_rate
varchar(5) NOT NULL DEFAULT '1' COMMENT '抓取頻率 默認(rèn)1(1小時)',config_sentiment_keyword
varchar(500) NOT NULL COMMENT '抓取關(guān)鍵字。多個用,分隔',config_sentiment_newtime
varchar(20) DEFAULT NULL COMMENT '最新抓取時間',config_sentiment_number
int(20) DEFAULT NULL COMMENT '最新抓取條數(shù)',config_sentiment_adduser
varchar(64) NOT NULL COMMENT '創(chuàng)建人',config_sentiment_addtime
varchar(20) NOT NULL COMMENT '創(chuàng)建時間',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;
插入數(shù)據(jù):
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','理財產(chǎn)品,百度理財,百度理財產(chǎn)品','2018030909570021',10,'88888888','2018030909570021','88888888','2018030909570021');
查看數(shù)據(jù):
我們可以看到,url中都沒有添加http://。keyword中有多個產(chǎn)品。
爭對場景一,解決方案有兩個:
1:使用最常用的,模糊查詢。sql語句:
like之后,我們發(fā)現(xiàn)有兩條數(shù)據(jù)。雖然模糊查詢的模糊可前,可后。但是這樣的模糊,查詢出數(shù)據(jù)太多了。很多都不是我想要的。
我就想要【理財】這個keyword的數(shù)據(jù)。這樣多數(shù)據(jù)中精確查詢怎么解決?請看下:
解決方案二:
利用MySQL 字符串函數(shù) 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);
查詢后結(jié)果:
這樣就解決問題了。
爭對問題2:更新語句:
UPDATE config_sentiment SET config_sentiment_web_url =CONCAT('http://www.',config_sentiment_web_url) WHERE LOCATE('http://',config_sentiment_web_url)=0;
執(zhí)行結(jié)果:
再次查詢看看http://www.是否添加到數(shù)據(jù)庫了。
已經(jīng)添加上了。問題已經(jīng)解決。
需要注意的是:在mysql中字符串連接不是使用【+】而是使用【concat函數(shù)】
凱哥java(微信id:kaigejava)
本文凱哥個人網(wǎng)站:http://kaigejava.com/article/detail/122
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。