Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dynamiczny JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
kangur91
Witam,
mam następujący problem. Mam 3 tabele nazwijmy je TABELA1, TABELA2, TABELA3.

TABELA1
-id (int)
-ktora (varchar(30)) <-- tu zapisana jest nazwa tabeli dla której używam JOIN
TABELA2
-id
-name
TABELA 3
-id
-name

Przyklad:
  1. SELECT n.`ktora`, m.`name` FROM TABELA1 n JOIN n.`ktora` m WHERE n.`id` = 124;


Zależy mi na tym aby łączył mi tabelę podaną w TABELA1.id

Ktoś wie jak to zrobićquestionmark.gif

Naprawdę nikt nie wie??
erix
Cytat
Naprawdę nikt nie wie??

Nikt się nie wypowiada, bo robisz głupotę:
Cytat
TABELA2
-id
-name
TABELA 3
-id
-name


Do jednej tabeli + jakieś pole rozróżniające. Rozdzielanie na kilka tabel nie ma sensu.
gogabed
Witam,
mam niestety podobny problem sciana.gif
Problemem jest również z kodem php (męczę się i niestety tylko do jednej tabeli wstawia mi nazwę)

POMOCY!!!
kangur91
Dobrze. Może podam przykład:

Mam 3 tabele:
a) oceny - zawiera pole "za_co", "za_co_id" (np. za_co = test)
cool.gif zadania domowe - zewiera pole "przedmiotId"
c) testy - zaweira pole "przedmiotId"

To jak wyszukać wszystkie oceny o tym samym przedmiotId??
erix
Może jednak pokaż deklaracje tabel?
kangur91
Model
erix
To nie możesz dać kolumny w stylu type rozróżnić po niej, czy test, czy homework? Tworzenie zduplikowanej, identycznej tabeli jest bez sensu.
wookieb
W zapytaniach mysql nie da się dynamicznie podawać nazw tabel w zapytaniach.
kangur91
Zgadza się. Tylko homework ma troche inne pola niz testy(na obrazku jest wersja uproszczona).

O nareszcie. Skoro nie można to ok. Dzięki wielkie
erix
Cytat
Tylko homework ma troche inne pola niz testy(na obrazku jest wersja uproszczona).

No to na przyszłość nie pomijaj kluczowych informacji.
kangur91
Ok. Zapamiętam. Aczkolwiek, nie ma to większego znaczenia gdyż zależało mi na odpowiedzi.

Cytat
W zapytaniach mysql nie da się dynamicznie podawać nazw tabel w zapytaniach.
Noidea
Tabele:
SUBJECTS
- id
- name

HOMEWORKS
- id
- subject_id
- title
- (...)

TESTE
- id
- subject_id
- title
- (...)

i zapytanie:
  1. SELECT s.id, s.name, h.title, 'homework' AS 'type'
  2. FROM homeworks h
  3. INNER JOIN subjects s ON ( h.subject_id = s.id )
  4. UNION
  5. SELECT s.id, s.name, t.title, 'test' AS 'type'
  6. FROM tests t
  7. INNER JOIN subjects s ON ( t.subject_id = s.id )


Tylko pamiętaj że liczba kolumn i ich typy w zapytaniach połączonych przez UNION muszą sobie odpowiadać. Jeśli z homeworks chcesz wyciągnąć 5 kolumn, a z tests 3, to zrób to osobnymi zapytaniami.
erix
Cytat
Aczkolwiek, nie ma to większego znaczenia

Ma. Wiele osób przychodzi tu z rozwiązaniami bezsensownymi, więc trzeba je wybijać (rozwiązania tongue.gif).

A to, że miałeś tam jeszcze jakieś pola -> było kluczowe.

Poza tym, jeśli chodzi o Twój temat -> możesz dać w jednej tabeli, stworzyć kolejną z polami charakterystycznymi dla homework i przez 1-1 elegancko sobie wyciągać. Żadnych komplikacji, nie trzeba tworzyć takich obejść, miejsce się nie zmarnuje (tak by było, gdybyś wrzucił całość w jedno, ale ustawiał nulle dla innego typu).
kangur91
ok. Wielkie dzięki za radę
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.