Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Porównanie i wybranie niepustej wartosci
ueszet
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.11.2010

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


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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
ueszet
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.11.2010

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


Dzięki wielkie właśnie o to mi chodziło. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 19.09.2025 - 13:20