Witam
Mam problem z ułożeniem zapytania do bazy
Tabela tbl_pracownicy zawiera m.in. pola
id_pracownik
nazwisko
imie
...
tabela tbl_uprawnienia zawiera m.in. pola
id_uprawnienia
nr_osoba
nr_upraw
...
Jedna osoba może mieć kilka rekordów w tabeli z uprawnieniami.
Mam problem ze zbudowaniem jednego zapytania do listowania osób z ich uprawnieniami.
Jeśli pracownik ma więcej niż jedno uprawnienie potrzebuję wyświetlić ostatnie (najświeższe) uprawnienie.
Aktualnie robię to na dwóch zapytaniach, ale może da się to zrobić w jednym.
Proszę o pomoc
JOIN, LIMIT i ORDER powinny wystarczyc. Wrzuc te 2 zapytania ktore teraz wykonujesz.
1.
SELECT `id_pracownik`,`nazwisko`,`imie_1`,`pesel`,`idef_pol` FROM `tbl_pracownicy` WHERE `zwolniony`='0' AND `jednostka_ewidencja`='".$_SESSION['upr_jednostka_glowna']."' ORDER BY `nazwisko`,`imie_1`
SELECT * FROM `tbl_ksi` WHERE `nr_osoba`= '".$row['id_pracownik']."' ORDER BY `data_od` DESC LIMIT 1
SELECT tk.* FROM tbl_ksi tk JOIN tbl_pracownicy tp ON tk.nr_osoba = tp.id_pracownik AND tp.zwolniony = 0 AND tp.jednostka_ewidencja='".$_SESSION['upr_jednostka_glowna']."' ORDER BY tk.data_od DESC LIMIT 1
Dziękuję za odpowiedź, jednak zapytanie zwraca mi pojedynczy rekord, a osób w bazie mam ponad 700.
Poprzednio nie dodałem jeszcze, że nie każda osoba może mieć wydane uprawnienia, ale (jak już pisałem) inna może mieć ich więcej niż jeden.
Dziękuję raz jeszcze, poczytam i jakoś to przerobię
SELECT p.`id_pracownik`,p.`nazwisko`,p.`imie_1`,p.`pesel`,p.`idef_pol`, t.* FROM `tbl_pracownicy` p LEFT JOIN (SELECT `nr_osoba`, Max(`data_od`) `data_od` FROM `tbl_ksi` GROUP BY `nr_osoba`) sub ON sub.`nr_osoba`=p.id_pracownik LEFT JOIN `tbl_ksi` t ON t.`nr_osoba`=sub.`nr_osoba` AND t.`data_od`=sub.`data_od` WHERE `zwolniony`='0' AND `jednostka_ewidencja`='".$_SESSION['upr_jednostka_glowna']."' ORDER BY `nazwisko`,`imie_1`
Idealnie
Dziękuję za gotowca
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)