Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak połaczyc 4 tablic
Forum PHP.pl > Forum > Bazy danych > MySQL
Grizzli
Jestem zaczynajacym uzytkowanikiem i razpoczynam dopiero programowac w Mysql
Musze napisac mała baze ofert pracy i mam problem z łaczenie tabel
tabele takie:

Pracodawcy|| ||Oferty_pracodawców|| Zawody || Wyksztalcenia

W tablicy zawody i wykrztalcenia maja byc przykładowe wyksztalcenia a w tablicy oferty_pracodawców ma byc odowałoanie do tych tablic i własnie nie bardzo wiem jak to zrobic i . Jak połaczyc te tablice ia takze jak zrobic zeby zapomoca kwarendy zrobi wyszukiwanie tych ofert ze wszystkich pol jakiego połaczenia uzyc

Przykładowae tablice
[SQL]
create table pracodawcy
(
idpracodawcy int unsigned not null auto_increment primary key,
firma ,
nazwisko
ulica
telefon
miejscowosc
wojew
kod_poczt
email
);





create table oferty_pracodawców
(
idoferty_praco int unsigned not null auto_increment primary key,
idpracodawcy int unsigned not null,
wykrztalcenie
zawod
opis text,
data date
);



create table zawody
(
idofert_praco int unsigned not null,
zawod
primary key ( zawod)
);




create table wykrztalcenie
(
idoferty_praco int unsigned not null,
wykrztalcenie
primary key ( wykrztalcenie)
);


Stworzyłem taką baze ale nie bardzo mi to chodzi nie wiem czy dobrze ustawiłem klucze , i jak zrobic połaczenie tych tabel zeby w formularzy po wybraniu jakiegos rekordu zeby wyswietalało to co wybiore a nie wyrzucało wszystko naraz



Z góry dziekuje za pomoc
Cysiaczek
Dodaj jeszcze pole które bedzie UNIQUE. To po pierwsze.
Po drugie: najlepiej uzyj phpMyAdmina do stworzenia bazy. Jest to wygodniejsze. Poz tym wygeneruje ci kod, który możesz potem umieścić w pliku i stworzyć bazę na innym serwerze. To ułatwi sprawę.

Po z tym, to czy ty masz problem z utworzeniem tej bazy, czy problem z wyciągnięciem z niej danych? jeśli z utworzeniem, to patrz wyżej, a jeśli z wyciągnieęciem, to też patrz wyżrj, bo to co napisałeś jest trochę nie tak - np. brak przecinków. Zreszta wklej mi cały skrypt, którym tworzysz bazę
Grizzli
Troszczke zmieniłem tak wyglada ta baza checem tak zrobic zeby pozniej jak bedzie formularz to zeby mogl sobie pobrac dane z tabeli np Branze jakie bede chciał a niew pisywac



  1. CREATE TABLE pracodawcy
  2. (
  3. IDpracodawca INT UNSIGNED NOT NULL AUTO_INCREMENT,
  4. firma char(60),
  5. nazwisko char(40),
  6. kontakt char(70) NOT NULL DEFAULT '(Podaj kontakt)',
  7. miejscowosc char(30) NOT NULL DEFAULT '(Podaj miejscowosc)',
  8. PRIMARY KEY (IDpracodawca)
  9. );
  10.  
  11.  
  12.  
  13.  
  14. CREATE TABLE oferty_pracodawcow
  15. (
  16. IDoferta_pracod INT UNSIGNED NOT NULL AUTO_INCREMENT,
  17. IDpracodawca INT UNSIGNED NOT NULL,
  18. branza char(30) NOT NULL DEFAULT '(Podaj branza)',
  19. wyksztalcenie char(20) NOT NULL DEFAULT '(Podaj wyksztalcenie)',
  20. stanowisko char(30),
  21. wojewodztwo char(30) NOT NULL DEFAULT '(Podaj wojewodztwo)',
  22. opis char(40),
  23. DATA date NOT NULL DEFAULT '(Podaj data)',
  24. PRIMARY KEY (IDoferta_pracod)
  25. );
  26.  
  27.  
  28. CREATE TABLE branże
  29. (
  30. branza char(30) NOT NULL,
  31. PRIMARY KEY (branza)
  32. );
  33.  
  34.  
  35.  
  36.  
  37. CREATE TABLE wojewodztwa
  38. (
  39. wojewodztwo char(30) NOT NULL,
  40. PRIMARY KEY (wojewodztwo)
  41. );



Jak powiazac te tabele Branza i wojewodztwa z oferty_pracodawcow

zeby ja bede chcial zobczyc kto dal oferte jakos oferte to zeby mi wyswietlił woszystko z tabel
ale nie wiem jak to zrobic sadsmiley02.gif
Fixer
Chcesz pobrać z tabel marki samochodów i wypisać przypisane do nich modele w postaci:

Kod
Audi: A6, A8, 100
BMW: 318, 750, Z3
Citroen: Berlingo, Xsara, C3


ROZWIĄZANIE
Często jest tak, że w jednej tabeli trzymane są jakieś ogólne pojęcia, do których przypisane są dane szczegółowe z drugiej tabeli. Mogą to być tytułowe marki i modele samochów, gatunki i podgatunki zwierząt bądź roślin, nazwy i typy monitorów lub pralek do prania.

Takich zależnośi jest wiele. Stwórzmy dwie tabele przechowujące dane o samochodach.

Kod
CREATE TABLE marki (
 id INT NOT NULL PRIMARY KEY,
 nazwa VARCHAR(100)
);

CREATE TABLE modele (
 id INT NOT NULL PRIMARY KEY auto_increment,
 markaid INT NOT NULL,
 nazwa VARCHAR(100)
);

INSERT INTO marki VALUES (1, "Audi");
INSERT INTO modele VALUES ("",1,"A6");
INSERT INTO modele VALUES ("",1,"A8");
INSERT INTO modele VALUES ("",1,"100");

INSERT INTO marki VALUES (2, "BMW");
INSERT INTO modele VALUES ("",2,"318");
INSERT INTO modele VALUES ("",2,"750");
INSERT INTO modele VALUES ("",2,"Z3");

INSERT INTO marki VALUES (3, "Citroen");
INSERT INTO modele VALUES ("",3,"Berlingo");
INSERT INTO modele VALUES ("",3,"Xsara");
INSERT INTO modele VALUES ("",3,"C3");

Nasze tabele prezentują się następująco:

+----+---------+
| id | nazwa   |
+----+---------+
|  1 | Audi    |
|  2 | BMW     |
|  3 | Citroen |
+----+---------+

+----+---------+----------+
| id | markaid | nazwa    |
+----+---------+----------+
|  1 |       1 | A6       |
|  2 |       1 | A8       |
|  3 |       1 | 100      |
|  4 |       2 | 318      |
|  5 |       2 | 750      |
|  6 |       2 | Z3       |
|  7 |       3 | Berlingo |
|  8 |       3 | Xsara    |
|  9 |       3 | C3       |
+----+---------+----------+

Pozostaje pytanie, jak pobrać z nich dane i wypisać w liniach tekstu poszczególne modele związane z markami. Oto odpowiedź:

  1. <?
  2. $baza = mysql_connect(&#092;"localhost\", \"user\", \"password\");
  3. mysql_select_db(&#092;"baza1\",$baza);
  4.  
  5. $marki = mysql_query(&#092;"SELECT * FROM marki;\");
  6.  
  7. for ($i=0;$i<mysql_num_rows($marki);$i++) {
  8.   $marka = mysql_fetch_array($marki);
  9.   echo $marka[&#092;"nazwa\"].\": \";
  10.   $modele = mysql_query(&#092;"SELECT * FROM modele 
  11.                          WHERE markaid={$marka[&#092;"id\"]}\");
  12.   for ($j=0;$j<mysql_num_rows($modele);$j++) {
  13.     $model = mysql_fetch_array($modele);
  14.     echo $model[&#092;"nazwa\"];
  15.     if ($j<mysql_num_rows($modele)-1) echo &#092;", \";
  16.   }
  17.   echo &#092;"<br>\";
  18. }
  19. mysql_close($baza);
  20. ?>

Na początku łączymy się z bazą danych i pobieramy zawartość tabeli marki. Na jej podstawie możemy określić ile jest marek i pobrać numer id przypisany do każdej z marek. Mamy też nazwę marki, którą od razu możemy wypisać na ekran.

Teraz w pętli, na podstawie numerów id kolejnych marek pobieramy wszystkie rekordy z tabeli modele, a więc modele przypisane do marki za pomocą numeru id.

Jeżeli modele występują, wypisujemy je na ekran. Dodatkowy warunek if sprawedza czy wypisywany jest ostatni element z modeli i nie dodaje za nim wtedy przecinka.

To wszystko - mamy w jednej linii wypisane marki z modelami.
Grizzli
dzieki sliczne przydało mi sie to bardzo smile.gif

Wracajac do mojej bazy zrobiłem jak napisales i działa ale mam problem jakie zapytanie trzeba zrobic zeby mi sie wyswietiła w tabeli oferta pracy danego pracodawcy plus kontak i miejscowosc oraz firma z tabel pracodawcy

jesli ktos wie prosze mi pomoc


z góry dziekuje
Darti
  1. SELECT oferty_pracodawców.wyksztalcenie, oferty_pracodawców.kod_poczt
  2. FROM oferty_pracodawców LEFT JOIN pracodawcy ON pracodawcy.idpracodawcy = oferty_pracodawców.idpracodawcy


Oczywiscie nad tym popracowac jeszcze trzeba, zauwaz ze wybralem kolumnę, która normalnie nie istnieje w oferty_pracodawcow (kod_poczt) (tak przynajmniej robilem w MS ACCESS i działało) a jak nie, to zrob tam
pracodawcy.kod_poczt
Mozesz jeszcze dopisać warunki WHERE itd

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.