我在表“tb_users”中有一个名为“image_path”的列。我已经保存了不是来自facebook和图像路径的用户的图像名称,如下所示:
**image_path**
https://graph.facebook.com/100916463/picture
user1.png
user2.png
现在我想在“select query”中为那些“image_path”不包含http的用户连接基本路径,否则按原样返回。
例如,如果image_path是https://graph.facebook.com/100916463/picture
,并且它包含http
,那么它应该由select查询按原样返回,但如果image_path
是user1.png
那么{{1像concat
这样的基本路径,以便选择查询返回http://www.example.com/images/
。
?
如何使用IF使用单个选择查询执行此操作?或任何其他运营商?
答案 0 :(得分:4)
SELECT IF(SUBSTR(image_path, 0, 7) == "http://" OR SUBSTR(image_path, 0, 8) == "https://", image_path, CONCAT("http://www.example.com/images/", image_path)) FROM ...
答案 1 :(得分:2)
使用案例和LIKE,您可以实现您想要的......
SELECT CASE WHEN image_path LIKE 'http%' THEN 'something' ELSE 'somethingelse' END
答案 2 :(得分:1)
理想的解决方案是处理null
和空字符串值(使用默认图像),并使用LEFT
来获得最佳效果。
SELECT
CASE
WHEN `image_path` IS NULL OR `image_path` = ''
THEN 'http://www.example.com/default.jpg'
WHEN LEFT(`image_path`, 4) = 'http'
THEN `image_path`
ELSE CONCAT('http://www.example.com/images/', `image_path`)
END AS `image_path`
FROM `your_table`
答案 3 :(得分:0)
如果你需要在应用程序中添加功能,如果你在存储时编码了image_path的类型,它会更直接,并允许其他情况。将您的数据结构更改为:
image_path_type_id int,
image_path varchar(250),
并使image_path_type_id指向具有可能图像类型的表。那么你的逻辑可以是确定性的,它可以很容易地扩展到其他图像类型和/或条件,并且如果你的image_path中有一个拼写错误就不会破坏(好吧,逻辑不会破坏)。
您的选择变为:
select case
when image_path_type_id = 1
then image_path
when image_path_type_id = 2
then concat('http://staticpath', image_path
end
添加另一个案例不需要更改架构;您只需将另一行添加到类型表中的类型列表中。