3

テーブル「tb_users」に「image_path」という名前の列があります。以下に示すように、Facebook以外のユーザーの画像名と、Facebookから登録された画像パスを保存しました。

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

ここで、「image_path」に http が含まれていないユーザーの「select query」でベース パスを連結したいと考えています。それ以外の場合はそのまま返します。

たとえば、image_path がhttps://graph.facebook.com/100916463/pictureであり、それが含まれている場合はhttp、select クエリによってそのまま返される必要がありますが、そうである場合image_pathuser1.png、select クエリが返すconcatように basepath が返されます。? IF を使用して単一の選択クエリでこれを行うにはどうすればよいですか? または他の演算子?http://www.example.com/images/http://www.example.com/images/user1.png

4

4 に答える 4

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 に答える