Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> relacje
MitS
post 13.07.2008, 10:57:24
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


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
Go to the top of the page
+Quote Post
wipo
post 13.07.2008, 18:23:56
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


  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


--------------------
Go to the top of the page
+Quote Post
miskorz
post 17.07.2008, 22:37:05
Post #3





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

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


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

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 09:21