![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 22.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
Mam specyficzny problem do rozwiązania z selectem. Co prawda rozwiązałem go w całkiem sprawnie działający sposób w PHP, jednak sposób ten zaczyna się komplikowac, gdy chcę zrobic filtrowanie danych. Mam dwie tabele: Tabela 1: Zawiera ID obiektu oraz kilka dodatkowych informacji; Tabela 2: Zawiera nazwy i opisy obiektów w różnych językach, powiązane z ID w tabeli 1. Wszystko byłoby proste, lecz nie chodzi mi o zwykłego join'a, lecz o taką sytuację: Każdy obiekt MUSI miec profil w języku angielskim, a dodatkowo MOŻE w innym języku. Jeśli na stronie ustawiony jest angielski, sprawa jest prosta - po prostu robię to zwykłym selectem z join'em. Sprawa się komplikuje, gdy na stronie będzie ustawiony polski. W takiej sytuacji chciałbym by wyglądało to tak: 1. Jeśli istnieje profil w j.polskim - wyświetl go; 2. Jeśli nie było profilu w j.polskim - wyświetl angielski. Czy ktoś ma jakiś pomysł, jak w mysql'u zrobic zapytanie/procedurę, która zwróci mi jednolity wynik utworzony wg. tych reguł? Pozdr Ten post edytował livinghatret 21.01.2010, 22:56:49 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Ja bym to zrobił z podzapytaniem. W podzapytaniu wybierasz dane dla aktualnej wersji językowej oraz dla domyślnej wersji językowej (tabelę dla aktualnej wersji językowej dołączasz poprzez LEFT JOIN aby umożliwić dołączanie wartości NULL). W wyniku tego otrzymujesz np.
Kod id | name_pl | name_en ---------------------- 1 | pies | dog 2 | NULL | cat Następnie w zapytaniu głównym wybierasz dane mniej więcej w ten sposób:
co zwróci: Kod id | name --------- 1 | pies 2 | cat Kluczem jest tutaj użycie funkcji COALESCE, która zwróci pierwszą wartość spośród przekazanych, która nie będzie NULLem. // Edit: Chyba można to zrobić bez podzapytania tylko w tym głównym wstawić COALESCE (IMG:style_emoticons/default/smile.gif) Ten post edytował phpion 22.01.2010, 08:42:21 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 20:28 |