3

我在表“tb_users”中有一个名为“image_path”的列。我已经为不是来自 facebook 的用户和从 facebook 注册的图像路径保存了图像名称,如下所示:

**image_path**
https://graph.facebook.com/100916463/picture
user1.png
user2.png

现在我想为那些“image_path”不包含http的用户在“选择查询”中连接基本路径,否则返回原样。

例如,如果 image_path 是https://graph.facebook.com/100916463/picture,并且它包含,那么http它应该由选择查询返回,但如果它是image_path一个基本路径,那么选择查询应该返回。? 如何使用 IF 使用单个选择查询来执行此操作?或任何其他运营商?user1.pngconcathttp://www.example.com/images/http://www.example.com/images/user1.png

4

4 回答 4

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 ...
于 2013-07-17T11:48:17.677 回答
2

有了一个案例和 LIKE,您就可以实现您想要的......

   SELECT CASE WHEN image_path LIKE 'http%' THEN 'something' ELSE 'somethingelse' END 
于 2013-07-17T11:48:56.453 回答
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`
于 2013-07-17T11:48:46.643 回答
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

添加另一个案例不需要更改架构;您只需在类型表中的类型列表中添加另一行。

于 2013-07-17T12:04:35.663 回答