Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] JOIN czy WHERE... AND...AND
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,


Mam takie tabele w bazie danych :

  1. $sql1 =
  2. "CREATE TABLE IF NOT EXISTS prisoners (
  3. prisoner_id int(11) NOT NULL AUTO_INCREMENT,
  4. name varchar(100) NOT NULL default '',
  5. surname varchar(100) NOT NULL default '',
  6. alias varchar(100) NOT NULL default '',
  7. born varchar(100) NOT NULL default '',
  8. annotation text(5000) NOT NULL,
  9. PRIMARY KEY (prisoner_id)
  10. )ENGINE = InnoDB";
  11.  
  12. $sql3 =
  13. "CREATE TABLE IF NOT EXISTS cells (
  14. cell_id int(11) NOT NULL AUTO_INCREMENT,
  15. floor int(5) NOT NULL,
  16. number int(10) NOT NULL,
  17. places int(5) NOT NULL,
  18. ward_id int(11) NOT NULL,
  19. PRIMARY KEY (cell_id),
  20. FOREIGN KEY (ward_id) REFERENCES wards(ward_id)
  21. )ENGINE = InnoDB";
  22.  
  23. $sql4 =
  24. "CREATE TABLE IF NOT EXISTS prisoners_cells (
  25. prisoner_id int(11) NOT NULL,
  26. cell_id int(11) NOT NULL,
  27. PRIMARY KEY (prisoner_id, cell_id),
  28. FOREIGN KEY (prisoner_id) REFERENCES prisoners(prisoner_id),
  29. FOREIGN KEY (cell_id) REFERENCES cells(cell_id)
  30. )ENGINE = InnoDB";
  31.  


Czyli tabele prisoners, cells i prisonners_cells,
Jak widac tabela prisoners_cells to tabela która łączy tabele prisoners i cells aby mozna bylo przypisac danego więźnia do celi, lub wielu wieźniów do jednej celi.

No i teraz powiedzmy ze chce wyświetlić nazwiska wieźniów którzy przebywają w celi o id = 11.

Po przejrzeniu kilku kursów i kulku próbach mam wątpliwości czy robić to za pomocą JOIN czy WHERE .... AND ... AND....

Moze mi ktos po krótce przedstawić kiedy sie stosuje dane rozwiązanie i dlaczego ?
Maciek1705
ja bym Ci robił złączenie tych tabel wraz z klauzurą where

select *
from dbo.
tu złączenie inner join
where no i tu warunek którego więźnia chcesz wyświetlić

cojack
Źle, możesz mieć jednogo więźnia w wielu celach. A chyba nie o to chodzi co?

Musisz zrobić relacjie typu jeden-do-wielu. One-to-many, gdzie jeden więzień może należeć do jednej celi a jedna cela może mięć wielu więźni. Popraw tabele winksmiley.jpg
Wolfie
Wiem ze zle, ten problem poruszalem tutaj (post #3)

A teraz pytalem o co innego winksmiley.jpg


ale juz rozkminilem kwestie ze złączeniami......

-------------------------------------------------------------------------

a jak bys to przrobil zeby byla relacja jeden-wielu ?

Moze odpowiedz w tamtym watku zeby nie bylo crosspostu....
seth-kk
join - to nowsza konstrukcja, zalecana w dokumentacji i moim zdaniem bardziej czytelna
thek
To ja odpowiem tutaj. Więzień ma przyporządkowaną jedną celę, a więc wystarczy dla więźnia ustawić pole cela smile.gif W ten sposób zawsze będziesz miał sytuację, że więzień jest w konkretnej jednej celi, co zresztą ułatwi Ci potem zapytanie, bo zrobisz szukanie po więźniach, którzy mają określone id celi, a więc bez łączenia się obywasz. Można zrobić jeszcze inaczej, zachowując Twoją strukturę... Wtedy klucz obcy w prisoners_cells tyczący więźnia musiałby być unique smile.gif To zabezpiecza przed dodaniem go do dwóch różnych cel.
Wolfie
To drugie rozwiazanie bardzej mi sie podoba, nie bo nie musze nic przerabiac tongue.gif

Pozdrawiam
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.