2012-02-04 8 views
12

W mojej bazie danych przechowuję pole o nazwie "type" jako tinyInt, ponieważ nie mam tak wielu typów, postanowiłem nie tworzyć tabeli do przechowywania odpowiednich nazw wszystkich tych typów.Mapa całkowita (id) na ciąg tekstowy?

Kiedy wysyłam zapytanie do mojej tabeli, chcę, aby typy były zastępowane ich odpowiednimi nazwami, które przechowuję w tablicach php. Zastanawiam się, czy istnieje sposób, aby wykonać ten zamiennik wewnątrz samej instrukcji SQL, zamiast przechodzić przez wyniki i zastępować zwracany wiersz wyników.

Czy coś takiego w ogóle istnieje:

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

Odpowiedz

18

Jedynym sposobem (jestem dość pewny), aby to zrobić jest użycie CASE .. WHEN ... konstrukt:

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

Można również użyć ELSE klauzula, aby określić wartość domyślną, np CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' ELSE 'unknown' END.

7

Faktycznie, w przeciwieństwie do odpowiedzi przez mathematical.coffee, tam faktycznie jest inny sposób w MySQL mapować liczbę na tekst - przynajmniej jeśli numery są przyległe:

W ELT() funkcja zwraca N -ty element listy łańcuchów: str1, jeśli N = 1, str2 if N = 2, i tak dalej. Zwraca NULL, jeśli N jest mniejsza niż 1 lub większa od liczby argumentów.

przykład:

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

Źródło:

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

Powiązane problemy