timg.jpg
- 先看SQL:
INSERT INTO `movie_detail_tab` (VIDEO_ID, PLAY_URL) SELECT
b.ID AS VIDEO_ID,
x.playurl AS PLAY_URL
FROM
(
SELECT
a.playurl,
CONCAT(
a.`卡通名`,
a.`第几集`
) AS 'videoCname'
FROM
(
SELECT
playurl,
SUBSTRING_INDEX(sname, ' ', 1) AS '卡通名',
IF (
SUBSTRING_INDEX(sname, ' ' ,- 1) < 10,
CONCAT(
0,
SUBSTRING_INDEX(sname, ' ' ,- 1)
),
SUBSTRING_INDEX(sname, ' ' ,- 1)
) AS '第几集'
FROM
`movie_tab`
) a
) x
INNER JOIN `video_detail_tab` b ON x.videoCname = b.VIDEO_CNAME
WHERE
x.playurl NOT IN (
SELECT
c.PLAY_URL
FROM
`movie_detail_tab` c
);
- 涉及三个表:
1. movie_detail_tab
id | VIDEO_ID | PLAY_URL |
---|---|---|
1 | 152 | 09f5280806d0fbab9fcc3c7f2ce37cc8 |
2 | 153 | d9c427446ca5aeceb5c0d7f310858373 |
2. movie_tab
id | sname | playurl |
---|---|---|
1 | 海贼王 1 | 98aed93a41bd4fe07f5824420511674c |
2 | 海贼王 2 | 598ce51cb2be1edbbc3dd2ce32a8af47 |
3. movie_detail_tab
id | VIDEO_CNAME |
---|---|
1 | 海贼王01 |
2 | 海贼王02 |
要实现批量插入不重复的movie_tab中的playurl以及对应movie_detail_tab中的id到movie_detail_tab
主要问题:
- movie_tab里的sname卡通名和集数之间有空格
- movie_detail_tab里的VIDEO_CNAME小于10的集数有数字0,比如01集
- 主要通过三个MySQL函数解决
1. SUBSTRING_INDEX(str,delim,count)
- str:要处理的字符串
- delim:分隔符
- count:计数
返回从字符串str分隔符delim中的计数发生前的子字符串。 如果计数是正的,则返回一切到最终定界符(从左边算起)的左侧。如果count为负,则返回一切到最后一个分隔符(右算起)的右侧。SUBSTRING_INDEX() 搜索delim时进行区分大小写的匹配。
2. IF()
在MySQL中IF()函数的用法类似于java中的三目运算符
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
3. CONCAT()
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。