Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porównanie i wybranie niepustej wartosci
Forum PHP.pl > Forum > Bazy danych > MySQL
ueszet
Witam,
mam dwie tabele dotyczące artykułu.
- com_artykuly (tutaj przechowywane są wszystkie ustawienia artykułu)
- com_artykuly_lang (tutaj przechowywane są wszystkie tlumaczenia językowe)

struktura tabeli: com_artykuly_lang (id,jezyk,tytul,wprowadzenie,tresc) w kolumnie język przechowuje wartość identyfikującą język.

Język domyślny witryny to 'pl', można jednak go zmienić np. na 'en'.

Do wywołania danych w języku polskim (domyslny język) używam zapytania:
SELECT * FROM com_artykuly as artykuly JOIN com_artykuly_lang as tlumacz WHERE artykuly.id = '1' AND artykuly.id = tlumacz.id AND tlumacz.jezyk = 'pl'
Analogicznie do wywołania danych w języku angielskim używam zapytania:
SELECT * FROM com_artykuly as artykuly JOIN com_artykuly_lang as tlumacz WHERE artykuly.id = '1' AND artykuly.id = tlumacz.id AND tlumacz.jezyk = 'en'

Teraz moje pytanie:
Jak wywołać dane z tabeli za pomocą jednego zapytania w taki sposób, że jak użytkownik zmieni język witryny z domyślnego (w tym wypadku pl) na inny np. en tak, że jak nie będzie tłumaczenia kolumny w języku 'en' (czyli kolumna jest pusta) wybrało wartość z językiem 'pl'.

Z góry dzięki za pomoc, szukałem wszędzie i nic nie mogę sobie przypasować, już mam dosyć.
phpion
Takie coś powinno Ci zadziałać:
  1. SELECT
  2. artykuly.*,
  3. COALESCE(tlumacz_aktualny.tytul, tlumacz_domyslny.tytul) AS tytul,
  4. COALESCE(tlumacz_aktualny.wprowadzenie, tlumacz_domyslny.wprowadzenie) AS wprowadzenie,
  5. COALESCE(tlumacz_aktualny.tresc, tlumacz_domyslny.tresc) AS tresc
  6. FROM
  7. com_artykuly AS artykuly
  8. LEFT JOIN com_artykuly_lang AS tlumacz_aktualny ON (artykuly.id = tlumacz_aktualny.id AND tlumacz_aktualny.jezyk = 'en')
  9. LEFT JOIN com_artykuly_lang AS tlumacz_domyslny ON (artykuly.id = tlumacz_domyslny.id AND tlumacz_domyslny.jezyk = 'pl')
  10. WHERE
  11. artykuly.id = 1
  12. ;

Tylko mała uwaga: COALESCE() wybiera pierwszą wartość, która nie jest NULLem. Jeśli więc nie będzie całego rekordu dla tłumaczenia aktualnego to zwróci wartość dla tłumaczenia domyślnego. Jeśli np. wypełnisz pole tytul dla wersji en, ale nie wypełnisz pola tresc wstawiając w nie pusty ciąg znaków to jako treść zostanie zwrócony pusty ciąg znaków (bo pusty ciąg znaków nie jest NULLem). Zamiast niego musisz wpisywać NULL, a nie pusty ciąg.
ueszet
Dzięki wielkie właśnie o to mi chodziło. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.