Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wielojęzykowość, podejście podejściu nierówne
x11100b
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 20.08.2009

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


mamy tabele:

Produkty
- id INTEGER
- cena INTEGER

Opisy_produktow
- id INTEGER
- id_produktu INTEGER
- id_jezyka INTEGER
- opis TEXT

Jezyki
- id INTEGER
- blank VARCHAR(255)

w polu "blank" tablicy "Jezyki" przetrzyumujemy tekst inforacyjny typu: dla pl. - "brak informacji w jezyku polskim, wybierz inny jezyk", a dla np. ang. - "information in english not availiable, choose different language"

powiedzmy, ze w sesji trzymamy id aktualnie uzywanego jezyka - chce wydobyc z bazy informacje o cenach produktow z opisami w aktualnym jezyku - a jesli takiego opisu dla aktualnego jezyka nie ma - chce dostac informacje "jezyki.blank"

czy takie podejscie do wielojezykowosci ma sens dla duzych projektow?

uprzejmie prosze o propozycje zapytan realizujacych wydobycie informacji o produktach w danym jezyku - ja nie umiem wymyslic zgrabnego rozwiazania tego problemu....

pozdrawiam,
Lukasz

moze nakresle problem troche dokladniej - w pokazanej wyzej strukturze, zalozmy, ze uzywamy jezyka o ID=1, i wyswietlamy informacje o produktach - uzywam takiego zapytania mysql:

  1. SELECT produkty.id, produkty.cena, opisy_produktow.opis
  2. FROM produkty, opisy_produktow
  3. WHERE opisy_produktow.id_jezyka = 1
  4. AND opisy_produktow.id_produktu = produkty.id


problem pojawia sie, gdy pewien produkt nie ma opisu w rzadanym jezyku (wtedy jest on pomijany na liscie, a wedlug zalozen - powinna byc wyswietlana informacja z tabeli jezyki "brak informacji w jezyku polskim", lub odpowiednio przetlumaczony ten tekst na inne jezyki)

wiadomo wiec, ze zapytanie powinno w FROM zawierac tabele jezyki:

  1. FROM produkty,opisy_produktow, jezyki


oraz, ze SELECT powinien uwzgledniac warunkowosc wartosci kolumny opis:

  1. SELECT produkty.id, produkty.cena, IF(??WARUNEK??, opisy_produktow.opis, jezyki.blank)


skladajac wszystko w calosc otrzymujemy pewien wzor zapytania do dopracowania:

  1. SELECT produkty.id, produkty.cena, IF(??WARUNEK??, opisy_produktow.opis, jezyki.blank)
  2. FROM produkty, opisy_produktow, jezyki
  3. WHERE opisy_produktow.id_jezyka = 1
  4. AND jezyki.id = 1
  5. AND opisy_produktow.id_produktu = produkty.id


jednak nie umiem wymyslic zgrabnego warunku... (IMG:style_emoticons/default/sciana.gif)
Go to the top of the page
+Quote Post
Echonik
post
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 19.05.2010

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


  1. SELECT
  2. produkty.id,
  3. produkty.cena,
  4. case when opisy_produktow.opis IS NULL OR opisy_produktow.opis = '' then
  5. jezyki.blank
  6. else
  7. opisy_produktow.opis
  8. end 'opis'
  9. FROM produkty
  10. JOIN opisy_produktow ON id_produktu = produkty.id
  11. JOIN jezyki ON jezyki.id = opisy_produktow.id_jezyka


O to chodziło?
Go to the top of the page
+Quote Post
x11100b
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 20.08.2009

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


Echonik - dzieki za zainteresowanie tematem, najprostrze rozwiazanie do jakiego udalo mi sie dotrzec opiera sie na LEFT JOIN oraz IFNULL:

  1. SELECT produkty.id, produkty.cena, IFNULL(opisy_produktow.opis, jezyk.blank)
  2. FROM produkty LEFT JOIN opisy_produktow ON (opisy_produktow.id_jezyka = 1 AND opisy_produktow.id_produktu = produkty.id), jezyki
  3. WHERE jezyki.id = 1


pozdrawiam,
Lukasz

PS> co sadzicie o takim podejsciu do wielojezykowosci systemu?

Ten post edytował x11100b 15.10.2010, 13:51:41
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Temat: Wielojezykowosc
Go to the top of the page
+Quote Post
Echonik
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 19.05.2010

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


Cytat(x11100b @ 15.10.2010, 14:50:43 ) *
  1. SELECT produkty.id, produkty.cena, IFNULL(opisy_produktow.opis, jezyk.blank)
  2. FROM produkty LEFT JOIN opisy_produktow ON (opisy_produktow.id_jezyka = 1 AND opisy_produktow.id_produktu = produkty.id), jezyki
  3. WHERE jezyki.id = 1


Skrypt jest OK, jeśli bierzesz pod uwagę to, że ma wyświetlić opis produktu, który posiada same spacje lub puste (nie mówię o wartości NULL, bo to nie jest to samo, co '').
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: 23.08.2025 - 12:14