Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z tabelami
Forum PHP.pl > Forum > Bazy danych
misiekmisiek1
Witam
Mam problem ze stworzeniem struktury bazy danych. Baza ma być zaprojektowana tak aby byla mozliwosc dodawania wielu jezykow (nieogranizona ilość smile.gif ). Elementy bazy to: dyscyplina(nazwa) -> kraj(nazwa) -> liga(nazwa) -> druzyna(nazwa, opis, adres). Zrobiłem coś takiego:

druzyna
-id
-nazwa
-opis
-adres
-ligaid

liga
-id
-nazwa
-krajid

kraj
-id
-nazwa

kraje
-id
-krajid
-jezykid
-nazwa

jezyk
-id
-nazwa
-skrot

Z tej struktury tylko element kraju wydaje sie być dobrze zapisany. Ma ktoś może pomysł jak zaprojektować bazę dla wszystkich tych elementów? Prosze o odpowiedź, z góry dzięki
AxZx
jezyk: idjezyk | nazwa | skrot
liga: idliga | idkraj
liga_jezyk: idliga | idjezyk | nazwa

zeby pobrac dane z tabeli liga w jezyku o id = 1
  1. SELECT * FROM liga_jezyk LEFT JOIN liga ON liga.idliga = liga_jezyk.idliga WHERE idjezyk = 1
nevt
z ta nieograniczoną ilością bym nie przesadzał. typowe serwisy obsługują 2, 3 maks. 4 języki...
w takich zastosowaniach stosuję nieco inną konstrukcję (ze względu na prostotę budowy zapytań i uniknięcie zbędnych JOIN'ów).

w każdej tabeli, w której są pola wielojęzyczne, powielam te pola dodając przyrostek tak jak określenie domeny www (pl - polski, uk - angielski, de -niemiecki, itd.)
czyli na przykładzie twojej tabelki:
druzyna
-id
-nazwa
-opis_pl
-opis_uk
-opis_de
-adres_pl
-adres_uk
-adres_de
-ligaid

a potem w kodzie php:
  1. <?php
  2. $lng = 'pl'; // przykładowo
  3. $sql = "SELECT id, nazwa, opis_$lng AS opis, adres_$lng AS adres, ligaid FROM druzy
    na WHERE ..."
    ;
  4. ?>

i wtedy w wynikach odwołuję się do pól 'opis' i 'adres' i mam w nich dane w odpowiednim języku ...

co jest dość istotne w tym rozwiązaniu, obsługa kolejnego języka wymaga tylko dodania odpowiednich pól w bazie danych - kod PHP nie zmienia się...
AxZx
slabe rozwiazanie gdy masz duzo tabel i chcesz dodac kolejny jezyk.
nevt
Cytat
slabe rozwiazanie gdy masz duzo tabel i chcesz dodac kolejny jezyk.

heh... rozbawiłeś mnie... mam skrypt, całe 7 linijek, który przelatuje wskazaną bazę i dodaje / usuwa / zmienia wskazany język we wszystkich tabelkach. w bazie z 100 tabel wykonuje sie ok. 3 sekund. oj jak łatwo krytykować cudze rozwiązania nie przedstawiając wad własnych propozycji smile.gif weź swój przykład wstaw do większego zapytania, gdzie składasz i grupujesz dane z kilku tabel a zobaczysz jaki ci potworek wyjdzie. o wydajności i spójności danych już nie wspomnę. pozdrawiam.
AxZx
no coz. niech autor tematu sam sobie wybierze rozwiazanie w zaleznosci od swoich potrzeb.


np title, description, keywords, content, title2, content2
dla 8 jezykow bedzie 6*8 = 48 kolumn + jeszcze inne kolumny z konfigiem to wychodzi ponad 50 kolumn
dobrze to rozumiem? mi sie wydaje ze tabele powinny byc zapelniane w dol a nie w bok.
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.