Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ MySQL _ Dwa zapytania w jednym

Napisany przez: pianta_d 1.03.2018, 10:17:00

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

Napisany przez: kapslokk 1.03.2018, 10:35:25

JOIN, LIMIT i ORDER powinny wystarczyc. Wrzuc te 2 zapytania ktore teraz wykonujesz.

Napisany przez: pianta_d 1.03.2018, 13:42:19

1.

  1. SELECT `id_pracownik`,`nazwisko`,`imie_1`,`pesel`,`idef_pol` FROM `tbl_pracownicy`
  2. WHERE `zwolniony`='0' AND `jednostka_ewidencja`='".$_SESSION['upr_jednostka_glowna']."'
  3. ORDER BY `nazwisko`,`imie_1`


2.
  1. SELECT * FROM `tbl_ksi` WHERE `nr_osoba`= '".$row['id_pracownik']."' ORDER BY `data_od` DESC LIMIT 1

Napisany przez: kapslokk 1.03.2018, 13:57:51

  1. SELECT tk.* FROM tbl_ksi tk
  2. JOIN tbl_pracownicy tp ON
  3. tk.nr_osoba = tp.id_pracownik
  4. AND tp.zwolniony = 0
  5. AND tp.jednostka_ewidencja='".$_SESSION['upr_jednostka_glowna']."'
  6. ORDER BY tk.data_od DESC LIMIT 1


Mniej wiecej tak, poczytaj tez o bindowaniu parametrow.

Napisany przez: pianta_d 1.03.2018, 14:10:13

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ę

Napisany przez: mmmmmmm 1.03.2018, 23:44:11

  1. 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`
  2. WHERE `zwolniony`='0' AND `jednostka_ewidencja`='".$_SESSION['upr_jednostka_glowna']."'
  3. ORDER BY `nazwisko`,`imie_1`

Napisany przez: pianta_d 3.03.2018, 10:45:58

Idealnie

Dziękuję za gotowca

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)