2012-02-04 9 views
12

私のデータベースでは、 "type"というフィールドをtinyIntという名前で保存しています。多くの型がないので、これらの型すべての対応する名前を格納するテーブルを作成しないと決めました。整数(id)をテキスト文字列にマップしますか?

テーブルを照会するときに、型をPHP配列に格納されている対応する名前に置き換えます。私は結果をループして返される結果行を置換するのではなく、SQL文の内部でこの置換を行う方法があるのだろうかと思います。

SELECT *, CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' END as stringType 
FROM orders 

あなたはまた、ELSEを使用することができます。これを行うには

select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders 

答えて

18

唯一の方法は、(私はかなり確信している)CASE .. WHEN ...構文を使用している:

はこのようなものも存在していデフォルトを指定するにはCASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' ELSE 'unknown' END

7

実は、mathematical.coffeeによって答えとは対照的に、実際にテキストに番号をマッピングするためのMySQL内の別の方法があります - あなたの番号が連続している、少なくとも場合:

ELT()関数が戻りますN文字列のリストの第str1の場合N = 1の場合はstr2の場合N = 2の場合、などとなります。 Nが1より小さいか、引数の数より大きい場合、NULLを返します。

例:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo'); 
     -> 'ej' 
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo'); 
     -> 'foo' 

出典:

https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt

関連する問題