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:
A może najlepszym rozwiązaniem byłoby dodanie kolumn dla AWARDS i PRODUCTS? Ten post edytował vokiel 23.07.2008, 13:07:06 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%)
|
Działające poprawnie zapytanie (bez uproszczeń):
Musi być CASE zamiast IF, bo IF(awards.id IS NULL, products.name, award.name) skutkuje, że wyświetla zawsze, tylko products.name, zmieniłem na początku na IS NOT NULL, żeby wyświetlał, jak pole nie będzie puste (ale wtedy niezależnie od parametru ACTION wyświetlał własnie tylko "products.name". Zatem skorzystałem z CASE, który okazał się tu idealnym rozwiązaniem. @ddiceman bardzo pomocny okazał się Twój LEFT JOIN:
Dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
vokiel [IF][CASE]![JOIN] Złączenie z kilku tabel z warunkami 23.07.2008, 11:59:25
ddiceman Pisze z glowy, wiec wymaga to sprawdzenia
[SQL] p... 23.07.2008, 20:42:29
osiris Wydaje mi sie ze wydajniejszym zapytaniem byloby:
... 24.07.2008, 12:39:00
vokiel Dzięki za zainteresowanie
Niestety, w Twoim przyk... 24.07.2008, 12:56:49
osiris Poprawilem 24.07.2008, 13:15:58
vokiel No i działa
Trudno mi teraz mierzyć wydajność obu... 24.07.2008, 14:39:43 ![]() ![]() |
|
Aktualny czas: 30.12.2025 - 03:23 |