2013-07-17 81 views
3

我在表「tb_users」中有一列名爲「image_path」的列。我爲誰從Facebook,誰是從Facebook註冊映像路徑不是用戶保存的圖像名稱,如下面所示:如果在MYSQL中查詢

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

現在我想Concat的在「選擇查詢」的基本路徑爲它的用戶「image_path」不包含http,否則按照原樣返回。

對於e.g如果IMAGE_PATH是https://graph.facebook.com/100916463/picture,它包含http那麼就應該通過選擇查詢,因爲它是返回,但如果image_pathuser1.png然後concathttp://www.example.com/images/,這樣的選擇查詢一個基本路徑應該返回http://www.example.com/images/user1.png。 ? 如何使用IF對單個選擇查詢執行此操作?或任何其他運營商?

回答

2

用的情況下和你一樣可以達到你想要的...

SELECT CASE WHEN image_path LIKE 'http%' THEN 'something' ELSE 'somethingelse' END 
+0

謝謝!!它的工作! –

+0

對於這個問題'LIKE'將比'SUBSTR'或'LEFT'差。 –

+0

@StevenMoseley當然是,但它處理空值和空字符串...... – aleroot

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 ... 
+0

+1,但它是image_path,而不是圖像。 –

+0

@StevenMoseley,謝謝,修復 – RiaD

+0

非常感謝。現在解決了:) –

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` 
0

這將是更直接,將允許更多的情況下,如果/當你需要將功能添加到您的應用程序,如果您在存儲image_path時編碼了該類型的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 

添加另一種情況下,將不需要改變架構;您只需將另一行添加到類型表中的類型列表中即可。

+0

這也是一個好主意。我已經想到了這個想法。但是我已經有了很多結果,所以我不想爲它們更新type_id。無論如何,非常感謝。 –