Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa kreiranjem upita

[es] :: MySQL :: Problem sa kreiranjem upita

[ Pregleda: 1590 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bloker
R. Srpska

Član broj: 79958
Poruke: 216
*.teol.net.



+3 Profil

icon Problem sa kreiranjem upita25.11.2013. u 13:39 - pre 125 meseci
Pozdrav, radim aplikaciju za evidenciju radnog vremena pa sam zakovao pri kreiranju upita.. U pitanju su 4 tabele:

tabela radnici: u kojoj se čuvaju svi podaci o radnicima i ima ključ ID
tabela erv: u koju se upisuju svi izlasci i dolasci radnika sa posla i na posao erv.radnikid=radnici.id
tabela kalendar: u kojoj se nalaze svi dani u jednom mjesecu sa opisima pored tih dana (radni dan, vikend, državni praznik, neradni dan...)
tabela odsustvo: u ovoj tabeli se upisuju godišnji odmori, bolovanja, plaćeno i neplaćeno odsustvo odsustvo.radnikid=radnici.id

evo i create za ove tabele:

Code:
CREATE TABLE `radnici` (
  `SIFRA` int(3) NOT NULL DEFAULT '0',
  `IME` varchar(100) NOT NULL DEFAULT ' ',
  `PREZIME` varchar(100) NOT NULL DEFAULT ' ',
  `JMBG` varchar(20) NOT NULL DEFAULT ' ',
  `SEKTOR` int(1) NOT NULL DEFAULT '0',
  `SLUZBA` int(2) NOT NULL DEFAULT '0',
  `RADNOMJESTO` varchar(255) NOT NULL DEFAULT ' ',
  `RADNOVRIJEME` int(1) NOT NULL DEFAULT '0',
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `AKTIVAN` int(1) NOT NULL DEFAULT '0' COMMENT '1-DA 0-NE',
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=215 DEFAULT CHARSET=utf8


Code:
CREATE TABLE `erv` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `RADNIKID` int(11) NOT NULL DEFAULT '0',
  `VRIJEMEP` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `LOKACIJAP` int(3) NOT NULL DEFAULT '0',
  `VRIJEMEK` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `LOKACIJAK` int(3) NOT NULL DEFAULT '0',
  `TIP` int(1) NOT NULL DEFAULT '0' COMMENT '1-dolazak/odlazak, 2-izlazak, 3-pauza',
  `IZLAZNICAID` int(11) NOT NULL DEFAULT '0',
  `NAPOSLU` time NOT NULL DEFAULT '00:00:00',
  `NAPOSLUPLATA` time NOT NULL DEFAULT '00:00:00',
  `VRIJEMEP_H` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `VRIJEMEK_H` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `OPRAVDANO` int(11) NOT NULL DEFAULT '0' COMMENT '1-opravdano, 2-neopravdano',
  `RAZLOG_O` varchar(200) NOT NULL DEFAULT ' ',
  `KORISNIK_O` int(11) NOT NULL DEFAULT '0',
  `VRIJEME_O` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `AKTIVNO` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=27605 DEFAULT CHARSET=utf8


Code:
CREATE TABLE `kalendar` (
  `DATUM` date NOT NULL DEFAULT '0001-01-01',
  `RADNI` int(11) NOT NULL DEFAULT '0',
  `OPIS` varchar(200) NOT NULL DEFAULT ' ',
  PRIMARY KEY (`DATUM`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Code:
CREATE TABLE `odsustvo` (
  `DATUM` date NOT NULL DEFAULT '0001-01-01',
  `RAZLOGID` int(5) NOT NULL DEFAULT '0',
  `NAPOMENA` varchar(200) NOT NULL DEFAULT ' ',
  `RADNIKID` int(11) NOT NULL DEFAULT '0',
  `DATUM_U` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `KORISNIK_U` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Treba da dobijem informacije o imenu i prezimenu radnika i njegovim aktivnostima za određeni vremenski period (u sledećem upitu od 01.11.2013. do 30.11.2013.)
iz tabele radnici treba da pročita ime i prezime, iz tabele kalendar da pročita opis, iz tabele erv njegove aktivnosti i iz tabele odsustvo da li je imao odsustvo.

Može se desiti da za jednog radnika imaju podaci u tabelama odsustvo i erv za isti dan (ne bi trebalo da se desi ali postoji šansa da rukovodilac napravi grešku i unese da je radnik na godišnjem odmoru, a on je tog dana radio)
pokušao sam sa ovakvim upitom ali ne mogu da dobijem podatke iz obje tabele (erv i odsustvo)

Code:
SELECT R.IME, R.PREZIME, E.VRIJEMEP, E.VRIJEMEK, O.NAPOMENA, K.DATUM
FROM kalendar AS K
LEFT OUTER JOIN erv AS E ON DATE(E.VRIJEMEP)=K.DATUM
RIGHT OUTER JOIN radnici AS R ON E.RADNIKID=R.ID
LEFT OUTER JOIN odsustvo AS O ON O.RADNIKID=R.ID AND K.DATUM=O.DATUM
WHERE K.DATUM>"2013-11-01" AND K.DATUM<="2013-11-30" AND R.SIFRA=1
ORDER BY K.DATUM


Nadam se da nisam previše zakomplikovao pitanje, ako treba još nešto da se pojasni tu sam.

[Ovu poruku je menjao bloker dana 25.11.2013. u 15:01 GMT+1]

[Ovu poruku je menjao bloker dana 27.11.2013. u 12:35 GMT+1]
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Problem sa kreiranjem upita26.11.2013. u 13:16 - pre 125 meseci
Nemaš grupisanje. Da li ti treba jedan red po radniku (GROUP BY R.ID) ili jedan red po danu (GROUP BY K.DATUM) ili kako?

Možeš staviti primer podatke i primer kako bi da ti izgleda rezultati?
"Common sense is not so common." - Voltaire
 
Odgovor na temu

bloker
R. Srpska

Član broj: 79958
Poruke: 216
*.teol.net.



+3 Profil

icon Re: Problem sa kreiranjem upita27.11.2013. u 10:34 - pre 125 meseci
Evo podaci za par dana:

tabela kalendar:
Code:
insert into `kalendar` (`DATUM`, `RADNI`, `OPIS`) values('2013-11-20','1','Radni dan');
insert into `kalendar` (`DATUM`, `RADNI`, `OPIS`) values('2013-11-21','0','Državni praznik');
insert into `kalendar` (`DATUM`, `RADNI`, `OPIS`) values('2013-11-22','1','Radni dan');


tabela radnik
Code:
insert into `radnici` (`SIFRA`, `IME`, `PREZIME`, `JMBG`, `SEKTOR`, `SLUZBA`, `RADNOMJESTO`, `RADNOVRIJEME`, `ID`, `AKTIVAN`) values('1','Milenko','Aničić','1111111111111','2','4','Projektant informacionih sistema','1','1','1');


tabela erv
Code:
insert into `erv` (`ID`, `RADNIKID`, `VRIJEMEP`, `LOKACIJAP`, `VRIJEMEK`, `LOKACIJAK`, `TIP`, `IZLAZNICAID`, `NAPOSLU`, `NAPOSLUPLATA`, `VRIJEMEP_H`, `VRIJEMEK_H`, `OPRAVDANO`, `RAZLOG_O`, `KORISNIK_O`, `VRIJEME_O`, `AKTIVNO`) values('27075','1','2013-11-22 06:49:42','100','2013-11-22 15:01:22','100','1','0','00:00:00','00:00:00','2013-11-22 06:49:42','2013-11-22 15:01:22','0',' ','0','0001-01-01 00:00:00','1');
insert into `erv` (`ID`, `RADNIKID`, `VRIJEMEP`, `LOKACIJAP`, `VRIJEMEK`, `LOKACIJAK`, `TIP`, `IZLAZNICAID`, `NAPOSLU`, `NAPOSLUPLATA`, `VRIJEMEP_H`, `VRIJEMEK_H`, `OPRAVDANO`, `RAZLOG_O`, `KORISNIK_O`, `VRIJEME_O`, `AKTIVNO`) values('26719','1','2013-11-20 06:47:26','100','2013-11-20 15:02:45','100','1','0','00:00:00','00:00:00','2013-11-20 06:47:26','2013-11-20 15:02:45','0',' ','0','0001-01-01 00:00:00','1');


tabela odsustvo
Code:
insert into `odsustvo` (`DATUM`, `RAZLOGID`, `NAPOMENA`, `RADNIKID`, `DATUM_U`, `KORISNIK_U`) values('2013-11-21','4','Državni praznik','1','2013-11-22 10:18:47','1');


a podaci koje bi trebalo da dobijem trebalo bi ovako da izgledaju
Code:
IME         PREZIME       VRIJEMEP           VRIJEMEK                   NAPOMENA       DATUM
Milenko    Aničić    2013-11-20 06:47:26    2013-11-20 15:02:45      Radni dan        2013-11-20
Milenko    Aničić                                                    Državni praznik  2013-11-21
Milenko    Aničić    2013-11-22 06:49:42    2013-11-22 15:01:22      Radni dan        2013-11-22
 
Odgovor na temu

bloker
R. Srpska

Član broj: 79958
Poruke: 216
*.teol.net.



+3 Profil

icon Re: Problem sa kreiranjem upita04.12.2013. u 10:29 - pre 125 meseci
Samo da kažem da sam riješio problem.. Napisao sam dva upita, prvi koji je selektovao podatke iz tabela: kalendar, radnici i erv i drugi koji je selektovao podatke iz tabela: kalendar, radnici i odsustvo i povezao ih sa "union"..
 
Odgovor na temu

[es] :: MySQL :: Problem sa kreiranjem upita

[ Pregleda: 1590 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.