2010-11-14 14 views
7

Nie wiem, jak daleko może zajść zapytanie sql w instrukcjach if/else.mysql IF Else Statement

Mam proste SELECT:

SELECT amount, transtype Z transactions

Kolumna transtype będzie liczbą.

Na przykład 1 = wyprzedaż, 2 = zwrot, 3 = błąd, 4 = anulowane, 5 = coś innego .... i tak dalej.

Nic skomplikowanego. Ale lista rośnie z powodów związanych z raportowaniem. Co jest w porządku.

Dla konkretnego zapytania nad którym pracuję, czy istnieje sposób wyodrębnienia tej kolumny jako jednej z 2 lub trzech określonych liczb lub tekstu?

Na przykład niektóre numery transz są "stratą", podczas gdy inne są "zyskami", a być może inne są "neutralne".

Chciałbym wyodrębnić tę kolumnę tylko z tymi 3, bez użycia php wewnątrz tabeli html Wrzucam wiersze do.

Jeśli moje wyjaśnienie nie jest jasne, moje przeprosiny. Trudno było wypluć.

+0

Chcesz zakwalifikować swoje wartości transkrypcji jako utratę, wzmocnienie lub neutralną? –

Odpowiedz

3

użyć funkcji MySQL CASE() dla stałej liczby argumentów. Jeśli lista się powiększa, powinieneś użyć drugiej tabeli i dołączyć do nich.

Przykład:

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; 
2

Spróbuj połączyć się z inną tabelą zawierającą typy transakcji. Coś jak:

TRANSACTION_TYPES 
transtype | number 
label  | varchar(32) 

Następnie zmodyfikować zapytanie do włączenia dołączenia:

select t.amount, t.transtype, l.label 
    from transactions.t 
    join transaction_types l on t.transtype = l.transtype; 
+0

Starałem się trzymać z dala od dodatkowego stołu. Nie przewiduję, że typ transty będzie miał więcej niż 10 numerów. Ale masz rację, to szybkie rozwiązanie. – coffeemonitor

+0

Zachowa także integralność danych w bazie danych, dzięki czemu możesz zrozumieć jej treść bez specjalnego zapytania, aby "wyjaśnić" twoje magiczne liczby. –

0

Funkcja ELT powinno załatwić sprawę:

SELECT ELT(`transtype`, 'loss', 'loss', 'gain', 'neutral', …) FROM … 

Nie bardzo elegancki, choć i logicznie Chciałbym to zrobić w logice widoku, a nie logiki bazy danych.

0

Powinieneś prawdopodobnie użyć ENUM type dla tej kolumny. Jest ograniczony do 64 wartości, jednak jeśli potrzebujesz więcej, powinieneś utworzyć nową tabelę i wpisać ją w zapytaniu jako JOIN.