Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka LEFT JOIN-ów do jednej tabeli?
Forum PHP.pl > Forum > Bazy danych > MySQL
Baki
Witam

czy mozna zrobic cos takiego iz mam 2 tabele:
SPRAWY: id_sprawy, status1, status2, status3
STATUSY: id_statusu, opis_statusu

tabela statusy, jest slownikiem, ktory przechowuje opis statusow ktore moga sie pojawic w tabeli sprawy (nie rozbijalem tego na 3 rozne tabele bo za malo tego)

takie zapytanie nie dziala, czy ktos moze zaproponowac jak to powinno wygladac?
a chce wyciagnac, opis dla 3 statusow, dla wszystkich spraw

  1. SELECT id_sprawy, status1, status2, status3 FROM sprawy LEFT JOIN statusy ON sprawy.status1=statusy.id_statusu LEFT JOIN statusy ON sprawy.status2=statusy.id_statusu LEFT JOIN statusy ON sprawy.status3=statusy.id_statusu


dzieki, pozdrawiam
AxZx
moze jednak zrob ta trzecia tabele sprawy_statusy.
Baki
Raczej bym musial zrobic 3 tabele
status1_opis
status2_opis
status3_opis

ale dla mnie to troszke bez sensu, bo kazda z nich bedzie zawierala po kilka wpisow.... to juz wole 1 tabele ktora bedzie zawierala kilkadziesiat rekordow..
zwlaszcza ze ta tabela/slownik: statusy moglaby byc wykorzystywana rowniez przez inne tabele niz sprawy...

da sie to jakos zrobic?
piaseq
Cytat(Baki @ 14.10.2008, 20:15:45 ) *
da sie to jakos zrobic?

Rozumiem, że kolejność statusów jest istotna. Możesz w takim przypadku zrobić jedną tabelę sprawa_status: id_sprawa, id_status, a jako trzecią kolumnę dodać datę lub numer, aby można było określić kolejność statusów.
AxZx
przemysl sprawe jeszcze raz bo to co proponujesz i co pytasz jest raczej nie normalne.

tabela sprawy_statusy:
idstatus, idsprawa

statusy: idstatus, opis

sprawy: idsprawa
  1. SELECT * FROM sprawy_statusy AS ss LEFT JOIN sprawy ON sprawy.idsprawa = ss.idsprawa LEFT JOIN statusy ON statusy.idstatus = ss.idstatus
Baki
piaseq, kolejnosc nie ma znaczenia...
chodzi jedynie o to, ze poszczegolna sprawa, w polaach status1, status2, status3 moze miec rozne wartosci "zeslownikoweane" w tabeli statusy..
i chcialbym jednym zapytaniem wyswietlic opis statusu..

bo moge to oczywiscie zrobic z pomoca PHP i 3 zapytan... ale wydawalo mi sie ze poprostu nie umiem zrobic prawidlowej skladni dla takiego zapytania ktore zastapiloby te 3...

AxZx, rozumiem ze proponujesz stworzenie tabeli, ktora by "laczyla" tabele sprawy i statusy.. jest to jakies rozwiazanie..
ale wymaga przebudowy bazy ktora jest juz pelna danych.. wiec z tego wzgledu trosze malo mi pasuje...

ale dzieki za sugestie..
zebupl
Baki to ja będę się czepiał Twojego schematu, dlatego bez urazu dry.gif smile.gif

Tabela: SPRAWY: id_sprawy, status1, status2, status3

1. Co zrobisz jak do sprawy będziesz musiał dorzucić 20 innych statusów ? Dodasz 20 atrybutów? Totalnie bez sensu. Każda tabela powinna posiadać nie więcej niż 16 atrybutów. Druga sprawa jak przemawia za rozbiciem tego fakt, że z tego zapisu jasno wynika, że winna to być relacja n:m. Każda sprawa posiada m statusów i każdy status może posiadać n spraw.

Jak poczytasz o relacji n:m dla encji to zrozumiesz dlaczego poprzednicy pisali o dodatkowej tabeli, to jest oczywistość.

Mając 3 tabele wystarczy jeden left join

pozdrawiam
munky
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.