1. 程式人生 > 資料庫 >mysql 資料庫中的三種判斷是否包含總結

mysql 資料庫中的三種判斷是否包含總結

mysql 資料庫中的三種判斷是否包含總結

凱哥Java 凱哥java
應用場景:
1:在使用mysql資料庫進行儲存資料的時候,有時候,一個欄位,要儲存使用逗號分隔的多個數據,在查詢的時候,傳遞的是一個keyword,需要在逗號分隔的欄位中進行查詢,這種情況怎麼處理?
比如:
在爬蟲爬取的時候,指定關鍵字查詢,關鍵字可以是多個用逗號分隔。資料庫中對應的欄位是:key_word,儲存的資料,比如:凱哥Java,kaigejava這樣的。那麼現在我要查詢的關鍵字是:凱哥java這樣的。怎麼查詢呢?
2:第二種情況,我們在更新的是,先判斷如果指定欄位,是否包含指定字串。如果不包含,在原有欄位上新增指定的欄位。

比如:
在爬取網站的時候,沒有新增http://www. 這個。判斷,如果沒有新增的,都更新新增http://www. 。這樣的如何更新呢?
前期準備:
建立資料庫:

mysql 資料庫中的三種判斷是否包含總結


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');

檢視資料:

mysql 資料庫中的三種判斷是否包含總結

我們可以看到,url中都沒有新增http://。keyword中有多個產品。

爭對場景一,解決方案有兩個:

1:使用最常用的,模糊查詢。sql語句:

mysql 資料庫中的三種判斷是否包含總結

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);
查詢後結果:

mysql 資料庫中的三種判斷是否包含總結

這樣就解決問題了。
爭對問題2:更新語句:
UPDATE config_sentiment SET config_sentiment_web_url =CONCAT(') WHERE LOCATE(';
執行結果:

mysql 資料庫中的三種判斷是否包含總結

再次查詢看看http://www.是否新增到資料庫了。

mysql 資料庫中的三種判斷是否包含總結

已經新增上了。問題已經解決。

需要注意的是:在mysql中字串連線不是使用【+】而是使用【concat函式】