在我的数据库中,我有一个这样的表:
id image_url house_id
1 /upload/house-id-52_myimagename1.jpg 52
2 /upload/house_id_52_myimagename2.jpg 52
3 /upload/house-id-52_myimagename3.jpg 52
我想使用SQL查询复制它,但希望image_url列中的图像名称始终带有" house-id- {house_id}"这种格式,无论它是否在以前的id中采用下划线格式。对于新的重复结果,IT应始终以短划线分隔,如下所示:
id image_url house_id
4 /upload/house-id-53_myimagename1.jpg 53
5 /upload/house-id-53_myimagename2.jpg 53
6 /upload/house-id-53_myimagename3.jpg 53
我已经对此进行了查询:
INSERT INTO house_gallery (image_url, house_id)
(SELECT
IF(image_url LIKE '%house_id_%',
replace(image_url, 'house_id_52', 'house-id-53'),
replace(image_url, 'house-id-52', 'house-id-53'))
AS `image_url`, 53 AS house_id
FROM house_gallery WHERE house_id = 52)
但house-id-52
的情况不适用。请检查并告知可能是什么解决方案,以获得虚线网址。
答案 0 :(得分:1)
如果模式相同,您可以使用substring_index
函数。请考虑以下
mysql> select * from image ;
+------+--------------------------------------+----------+
| id | image_url | house_id |
+------+--------------------------------------+----------+
| 1 | /upload/house-id-52_myimagename1.jpg | 52 |
| 2 | /upload/house_id_52_myimagename2.jpg | 52 |
| 3 | /upload/house-id-52_myimagename3.jpg | 52 |
+------+--------------------------------------+----------+
select
case
when
substring_index(substring_index(image_url,'/',-1),'_',1) = 'house'
then replace(image_url,'house_id_52','house-id-53')
else
replace(image_url, 'house-id-52', 'house-id-53')
end as modified
from image ;
你会得到
+--------------------------------------+
| modified |
+--------------------------------------+
| /upload/house-id-53_myimagename1.jpg |
| /upload/house-id-53_myimagename2.jpg |
| /upload/house-id-53_myimagename3.jpg |
+--------------------------------------+
现在让我们创建另一个表
mysql> create table image_copy like image ;
Query OK, 0 rows affected (0.11 sec)
mysql> describe image_copy;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| image_url | varchar(100) | YES | | NULL | |
| house_id | int(11) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
所以插入查询是
insert into image_copy
select
id,
case
when
substring_index(substring_index(image_url,'/',-1),'_',1) = 'house'
then replace(image_url,'house_id_52','house-id-53')
else
replace(image_url, 'house-id-52', 'house-id-53')
end as image_url,
'53'
from image
where house_id = 52
;
mysql> select * from image_copy ;
+------+--------------------------------------+----------+
| id | image_url | house_id |
+------+--------------------------------------+----------+
| 1 | /upload/house-id-53_myimagename1.jpg | 53 |
| 2 | /upload/house-id-53_myimagename2.jpg | 53 |
| 3 | /upload/house-id-53_myimagename3.jpg | 53 |
+------+--------------------------------------+----------+
3 rows in set (0.00 sec)