Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: relacje
Forum PHP.pl > Forum > Bazy danych
MitS
Witam serdecznie,

Otóż posiadam sobie takie tabelki:


gdzie:
<pk> - primary key
<ix> - index

i niestety nie wiem jak je powiązać relacjami w taki sposób by:
* tabelka menu była powiązana z menuName
* tabelka languages też była powiązana z menu name

i teraz dla langName "pl" (z tabelki languages) i dla siteName "about" (z tabelki menu) chciałbym przypisać odpowiednią wartość realName (tabelka menuName)

np.

languages
Kod
+-------+------------+-----------+--------------+
|idLang | langName   | langDesc  | langDefault  |
+-------+------------+-----------+--------------+
|1      | pl         | polski    | 1            |
|2      | en         | english   | 0            |
|3      | de         | deutsch   | 0            |
+-------+------------+-----------+--------------+


Menu
Kod
+--------+--------+---------------+-------+--------+
| idMenu | type   | siteName      | isSsl | isAuth |
+--------+--------+---------------+-------+--------+
|      1 |        | news          |     0 |      0 |
|      2 |        | about         |     0 |      0 |
+--------+--------+---------------+-------+--------+


MenuName
Kod
+----+------------+------------+---------------+
| id | langName   | siteName   | realName      |
+----+------------+------------+---------------+
| 1  | pl         | news       | Aktualności   |
| 2  | en         | news       | Latest News   |
| 3  | de         | news       | Aktualität    |
| 4  | pl         | about      | O nas         |
| 5  | en         | about      | About Us      |
| 6  | de         | about      | Über uns      |
+----+------------+------------+---------------+



no właśnie i teraz jakich użyć relacji między tymi trzema tabelami tak by było prawidłowo ?
Czy da się w tabelmi menuName zrobić tak by wartości raz użyte się nie powtarzały ale np.
prawidłowo:
pl news
en news
pl about
en about

nieprawidłowo:
pl news
en news
pl news
en about
en about

czy da się to z poziomy mysql'a zabezpieczyć czy raczej zostaje php ?


Będę wdzieczny za odpowiedź!
Najbardziej mi zależy na relacjach by tabele poprawnie połaczyc.
Pozdrawiam
wipo
  1. SELECT l.langName, mn.realName FROM languages l JOIN menuName mn ON mn.langName=l.langName JOIN menu m ON m.siteName=mn.siteName


jezeli chcesz popatrzec co sie dzieje z kluczami dodaj explain na poczatku zapytania
miskorz
W tabeli MenuName zamiast kolumn langName oraz SiteName powinny być kolumny zawierające klucze obce do tabel odpowiednio language i Menu. Na tych polach powinny być utworzone klucze obce do tych tabel - przykładowo w MySQL

CREATE TABLE tab (
....,
id_lang int,
....,
CONSTRAINT fk_lang foreign key (id) references language(id),
....)

Są inne sposoby dodawania, ale robią to samo. Ten ma działać - chyba, że coś w kodzie pomyrdałem...
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.