Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SELECT Statement
Forum PHP.pl > Forum > Bazy danych > MySQL
blacha23
otoz do mojej nazy danych dodalem nastepujace wpisy

  1. INSERT INTO pracownik (pid,name,dzial) VALUES (1,'Ingo Schmitz',1)
  2. INSERT INTO pracownik (pid,name,dzial) VALUES (2,'Marie Bauer',1)
  3. INSERT INTO pracownik (pid,name,dzial) VALUES (3,'Herbert Knecht',1)
  4. INSERT INTO pracownik (pid,name,dzial) VALUES (4,'Veit Herzog',1)
  5. INSERT INTO pracownik (pid,name,dzial) VALUES (5,'Tim Kramer',2)
  6. INSERT INTO pracownik (pid,name,dzial) VALUES (6,'Heike Tesch',2)
  7. INSERT INTO pracownik (pid,name,dzial) VALUES (7,'Luise Droste',2)
  8. INSERT INTO pracownik (pid,name,dzial) VALUES (8,'Peter Meier',3)
  9. INSERT INTO pracownik (pid,name,dzial) VALUES (9,'Konrad Trumpf',3)
  10.  
  11.  
  12. INSERT INTO dzial (aid,name,kierownik) VALUES (1,'Abt. Eisenteile',1)
  13. INSERT INTO dzial (aid,name,kierownik) VALUES (2,'Abt. Plastikteile',6)
  14. INSERT INTO dzial (aid,name,kierownik) VALUES (3,'Abt. Aluteile',8)



chce teraz napisac polecenie SELECT, zeby wybilo mi wszystkie nazwiska z dzalu, ktorego kierownikiem jest Peter Meier, czyli Peter Meier i Konrad Trumpf
wiem jak napisac SELECT, zeby wybralo dzial, ktory prowadzi Peter Meier

  1. SELECT p.dzial FROM pracownik p, dzial d WHERE p.name='Peter Meier' AND p.pid=d.kierownik


nie wiem tylko jak polaczyc to zeby mi to zastosowalo na pracownikow i wyfiltrowalo wszystkich z tego dzialu
z gory dzieki
piotrooo89
  1. SELECT * FROM pracownik, dzial WHERE dzial=3


tak? bo kurcze nie rozumiem.
blacha23
takie rozwiazanie to mam juz, ale chce zeby to bylo ogolne i w przyszlosci jesli musialbym zmienic name to odrazu autom. by sie zmienil dzial i wypluloby odpowiednich pracownikow...
myslalem miej wiecej o czyms takim

  1. SELECT p.name FROM pracownik p,(SELECT p.dzial FROM pracownik p, dzial d WHERE p.name='Peter Meier' AND p.pid=d.kierownik )x
  2. WHERE p.dzial=x


tylko to nie dziala
piotrooo89
kurcze nie czaje. przecież jak zmienisz nazwę działu to dalej będzie działać.

btw. piszesz strasznie zawile... albo ja nie mogę nadążyć :|
blacha23
jeszcze raz od poczatku,
mam nastepujace wpisy

  1. INSERT INTO pracownik (pid,name,dzial) VALUES (1,'Ingo Schmitz',1)
  2. INSERT INTO pracownik (pid,name,dzial) VALUES (2,'Marie Bauer',1)
  3. INSERT INTO pracownik (pid,name,dzial) VALUES (3,'Herbert Knecht',1)
  4. INSERT INTO pracownik (pid,name,dzial) VALUES (4,'Veit Herzog',1)
  5. INSERT INTO pracownik (pid,name,dzial) VALUES (5,'Tim Kramer',2)
  6. INSERT INTO pracownik (pid,name,dzial) VALUES (6,'Heike Tesch',2)
  7. INSERT INTO pracownik (pid,name,dzial) VALUES (7,'Luise Droste',2)
  8. INSERT INTO pracownik (pid,name,dzial) VALUES (8,'Peter Meier',3)
  9. INSERT INTO pracownik (pid,name,dzial) VALUES (9,'Konrad Trumpf',3)
  10.  
  11.  
  12. INSERT INTO dzial (aid,name,kierownik) VALUES (1,'Abt. Eisenteile',1)
  13. INSERT INTO dzial (aid,name,kierownik) VALUES (2,'Abt. Plastikteile',6)
  14. INSERT INTO dzial (aid,name,kierownik) VALUES (3,'Abt. Aluteile',8)


i chce wyciagnac pracownikow z dzialu, ktorym kieruje Peter Meier poprostu, ale rozwiazanie nie ma sie opierac na wpisach do tabel, tylko ogolnie na tabelach


  1. CREATE TABLE pracownik(pid INTEGER NOT NULL PRIMARY KEY,name VARCHAR(100),dzial INTEGER)
  2.  
  3. CREATE TABLE dzial(did INTEGER NOT NULL PRIMARY KEY,name VARCHAR(100),kierownik INTEGER,FOREIGN KEY (kierownik) REFERENCES pracownik (pid))



wpisy maja pozniej tylko pomoc sie upewnic, ze Select Statement dobrze jest napisane
skowron-line
Cytat(piotrooo89 @ 29.06.2009, 11:40:55 ) *
  1. SELECT * FROM pracownik, dzial WHERE dzial=3

Chyba nigdy nie połączyłeś 2 tabel.

Cytat
ale rozwiazanie nie ma sie opierac na wpisach do tabel, tylko ogolnie na tabelach

Może pokaż jak wynik zapytania powinien wyglądać może będzie prościej bo z tego co napisałeś to ja również nic nie kumam.
blacha23
wynikiem zapytania powinny byc nazwiska pracownikow, ktorzy pracuja w dziale, ktory prowadzi Peter Meier,
czyli Peter Meier i Konrad Trumpf

zapytanie ma sie opierac na 2 tabelach utworzonych wczesniej

  1. CREATE TABLE pracownik(pid INTEGER NOT NULL PRIMARY KEY,name VARCHAR(100),dzial INTEGER)
  2.  
  3. CREATE TABLE dzial(did INTEGER NOT NULL PRIMARY KEY,name VARCHAR(100),kierownik INTEGER,FOREIGN KEY (kierownik) REFERENCES pracownik (pid))


i myslalem nad takim rozwiazaniem

  1. SELECT p.name FROM pracownik p,(SELECT p.dzial FROM pracownik p, dzial d WHERE p.name='Peter Meier'AND p.pid=d.kierownik)x WHERE p.dzial=x


tylko dostaje nastepujacy blad
"X" is not valid in the context where it is used. SQLSTATE=42703
NoiseMc
  1. SELECT p.name FROM pracownik p WHERE p.dzial = (SELECT d.did FROM dzial d INNER JOIN pracownik p ON d.kierownik = p.pid AND p.name LIKE 'Peter Meier')
blacha23
Cytat(NoiseMc @ 29.06.2009, 14:58:21 ) *
  1. SELECT p.name FROM pracownik p WHERE p.dzial = (SELECT d.did FROM dzial d INNER JOIN pracownik p ON d.kierownik = p.pid AND p.name LIKE 'Peter Meier')


wielkie dzieki, o to chodzilo
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.