Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [IF][CASE]![JOIN] Złączenie z kilku tabel z warunkami
vokiel
post
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Witam. Mam problem ze złączeniem danych z kilku tabel, w zależności od wartości danych w jednej kolumnie.
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:
  1. SELECT
  2. `OPERATIONS`.`ID` ,
  3. `OPERATIONS`.`ACTION` ,
  4. CASE
  5. WHEN `OPERATIONS`.`ACTION` =2 THEN `AWARDS`.`NAME`
  6. WHEN `OPERATIONS`.`ACTION` =3 THEN `PRODUCTS`.`NAME`
  7. END AS `NAME` ,
  8. FROM `OPERATIONS` LEFT OUTER JOIN `AWARDS` ON `OPERATIONS`.`PRODUCT` = `AWARDS`.`ID`
  9. LEFT OUTER JOIN `PRODUCTS` ON `OPERATIONS`.`PRODUCT` = `PRODUCTS`.`ID`
  10.  
  11. WHERE `OPERATIONS`.`ID` >10 LIMIT 0, 30


A może najlepszym rozwiązaniem byłoby dodanie kolumn dla AWARDS i PRODUCTS?

Ten post edytował vokiel 23.07.2008, 13:07:06
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 04:46