如果在MYSQL查询中

时间:2013-07-17 11:45:16

标签: php mysql

我在表“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_pathuser1.png那么{{1像concat这样的基本路径,以便选择查询返回http://www.example.com/images/。 ? 如何使用IF使用单个选择查询执行此操作?或任何其他运营商?

4 个答案:

答案 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

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