Dokładniej:
mam 3 tabele:
PRODUCTS
| ID | NAME | .... |
AWARDS
| ID | NAME |...|
OPERATIONS
| ID | .... | ACTION | PRODUCT |
I teraz pojawia się problem bo mamy ogólnie 3 dostępne akcje:
1 - standard
2 - produkt
3 - nagroda
czyli przykładowe rekordy będą wyglądać tak:
OPERATIONS
| 1 | ... | 1 | NULL |
| 2 | ... | 2 | 2 |
| 3 | ... | 3 | 1 |
| 4 | ... | 2 | 1 |
| 5 | ... | 1 | NULL |
W wyniku chciałbym otrzymać:
QUERY
| 1 | ... | 1 | NULL |
| 2 | ... | 2 | AWARD 2 NAME |
| 3 | ... | 3 | PRODUCT 1 NAME |
| 4 | ... | 2 | AWARD 1 NAME |
| 5 | ... | 1 | NULL |
Zatem JOIN chyba odpada, bo nie będzie wiedział z której tabeli dołączać.
Przydałby się IF a może bardziej CASE
skleciłem coś takiego z case, ale nie działa tak jak trzeba, w kolumnie NAME dostaje wszędzie NULL:
SELECT `OPERATIONS`.`ID` , `OPERATIONS`.`ACTION` , CASE WHEN `OPERATIONS`.`ACTION` =2 THEN `AWARDS`.`NAME` WHEN `OPERATIONS`.`ACTION` =3 THEN `PRODUCTS`.`NAME` END AS `NAME` , FROM `OPERATIONS` LEFT OUTER JOIN `AWARDS` ON `OPERATIONS`.`PRODUCT` = `AWARDS`.`ID` LEFT OUTER JOIN `PRODUCTS` ON `OPERATIONS`.`PRODUCT` = `PRODUCTS`.`ID` WHERE `OPERATIONS`.`ID` >10 LIMIT 0, 30
A może najlepszym rozwiązaniem byłoby dodanie kolumn dla AWARDS i PRODUCTS?