Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak zkonstruować zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
rudolf35
Witam, robie bazę danych na zaliczenie i stworzyłem narazie takie tabelki
  1. CREATE TABLE oddzialy
  2.  
  3. (id_oddz int NOT NULL AUTO_INCREMENT,
  4.  
  5. miejscowosc char(12),
  6.  
  7. ulica char(30),
  8.  
  9. nr_lokalu char(5),
  10.  
  11. PRIMARY KEY(id_oddz));
  12.  
  13.  
  14.  
  15.  
  16. CREATE TABLE szkolenia
  17.  
  18. (id_szk int NOT NULL AUTO_INCREMENT,
  19.  
  20. temat char(40),
  21.  
  22. PRIMARY KEY(id_szk));
  23.  
  24.  
  25.  
  26.  
  27. CREATE TABLE oddzialy_szkolenia
  28.  
  29. (ewid_oddz int NOT NULL REFERENCES oddziały(id_oddz),
  30.  
  31. ewid_szk int NOT NULL REFERENCES szkolenia(id_szk),
  32.  
  33. data_od date NOT NULL,
  34.  
  35. data_do date NOT NULL,
  36.  
  37. PRIMARY KEY(ewid_oddz, ewid_szk));

I mam pytanie-jak ułożyc zapytanie żeby wypisało szkolenie które odbyło się np. 2005-01-04, w jednej linii z miejscowościa oddziału i tematem. Jak wpisze zapytanie
  1. SELECT *
  2. FROM `oddzialy_szkolenia` WHERE `data_od` = '2005-01-04'

To wypisze mi kolejno dwa klucze, date od, date do, a ja chce jeszcze te dwie rzeczy. Bo nie sądze że trzeba dodać jesc ze dwie referencje... Proszę o wyrozumiałość to moje pierwsze zetknięcie z SQL-em. Pozdrawiam
phpion
Poczytaj o złączeniach tabel czyli o JOINach:
  1. SELECT a.*, b.miejscowosc, c.temat
  2. FROM oddzialy_szkolenia a
  3. LEFT INNER JOIN oddzialy b ON b.id_oddz=a.ewid_oddz
  4. LEFT INNER JOIN szkolenia c ON c.id_szk=a.ewid_szk
  5. WHERE a.data_od = '2005-01-04'

Nie sprawdzałem ale powinno działać.

Swoją drogą: mamy końcówkę maja, a to twoja pierwsza styczność z SQL? Co robiłeś przez pozostałe miesiące?...

// EDIT:
poprawiłem literówkę w zapytaniu (m.miejscowosc -> b.miejscowosc)
rudolf35
Może troche przesadziłem, że jest to moja pierwsza styczność z SQLem, bo chodziłem na zajęcia więc troche o nim posłuchałem. Ale jest to moja pierwsza styczność od praktycznej strony. Bo mam jeszcze masę innych zadań i pracy(studia zaoczne+praca :-) ). Poczytałem o joinach i też mi się wydaje że powinno działać to co napisałeś, ale nie działa. Wywala komunikat:
Cytat
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN oddzialy b ON b.id_oddz=a.ewid_oddz
LEFT INNER JOIN szkolenia c ON c.' at line 3
Chociarz polecenie wydaje się jak najbardziej poprawne...
phpion
To wywal INNER i zostaw samo LEFT JOIN.
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.