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

pomoc oko upita, ne vraca tacan rezultat

[es] :: MySQL :: pomoc oko upita, ne vraca tacan rezultat

[ Pregleda: 2370 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bane1234

Član broj: 327433
Poruke: 41
*.cnt.rs.



+1 Profil

icon pomoc oko upita, ne vraca tacan rezultat14.09.2015. u 12:24 - pre 104 meseci
Pozdrav,
treba da napravim obracun sirovina u magacinu. Imam tabele sirovine(tu su ulazi sirovina u magacin), radni_nalozi(cim se kreira radni nalog skidaju se sirovine) i normativi(sastavnice proizvoda, bira se pri kreiranju radnog naloga). Problem je sto mi stored procedura vraca rezultat tacan samo kad jedan radni nalog unesem, nakon vise unosa uvecava stanje za sum kolicine u tabeli sirovine.

procedura
Code:

CREATE  PROCEDURE `stanje_sirovina`()
BEGIN
SELECT sirovine.Magacin,sirovine.naziv,(sum(sirovine.Kolicina)-ifnull(sum(radni_nalozi.kolicina*normativi.Kolicina),0)) as 'stanje'
from sirovine left join(radni_nalozi inner join normativi on normativi.IDNormativa=radni_nalozi.normativ) on  sirovine.IDSirovine=normativi.Sirovina
and sirovine.Magacin=radni_nalozi.MagacinSirovina
group by Naziv,Magacin;
END


create statements
Code:

CREATE TABLE `radni_nalozi` (
 `IDRN` int(11) NOT NULL AUTO_INCREMENT,
 `BrojRN` varchar(255) NOT NULL,
 `sifra_proizvoda` varchar(255) NOT NULL,
 `kolicina` decimal(10,2) NOT NULL,
 `normativ` varchar(100) NOT NULL,
 `DatumRN` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `ZadatiDatum` date DEFAULT NULL,
 `Proizvodnja` int(11) NOT NULL,
 `Realizovan` bit(1) NOT NULL DEFAULT b'0',
 `MagacinSirovina` int(11) NOT NULL,
 PRIMARY KEY (`IDRN`),
 KEY `BrojRN` (`BrojRN`),
 KEY `normativ` (`normativ`),
 KEY `Proizvodnja` (`Proizvodnja`),
 KEY `sifra_proizvoda` (`sifra_proizvoda`),
 KEY `normativ_2` (`normativ`),
 KEY `MagacinSirovina` (`MagacinSirovina`),
 CONSTRAINT `radni_nalozi_ibfk_4` FOREIGN KEY (`MagacinSirovina`) REFERENCES `magacini_sirovine` (`id_magacina`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `radni_nalozi_ibfk_1` FOREIGN KEY (`normativ`) REFERENCES `normativi` (`IDNormativa`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `radni_nalozi_ibfk_2` FOREIGN KEY (`Proizvodnja`) REFERENCES `proizvodnja` (`IDProizvodnje`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `radni_nalozi_ibfk_3` FOREIGN KEY (`sifra_proizvoda`) REFERENCES `proizvodi` (`SifraProizvoda`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2626 DEFAULT CHARSET=utf8

CREATE TABLE `normativi` (
 `ID` int(11) NOT NULL AUTO_INCREMENT,
 `IDNormativa` varchar(100) NOT NULL,
 `SifraProizvoda` varchar(100) NOT NULL,
 `Sirovina` varchar(100) NOT NULL,
 `Kolicina` decimal(11,2) NOT NULL,
 PRIMARY KEY (`ID`),
 KEY `SifraProizvoda` (`SifraProizvoda`),
 KEY `Sirovina` (`Sirovina`),
 KEY `IDNormativa` (`IDNormativa`),
 KEY `IDNormativa_2` (`IDNormativa`),
 KEY `IDNormativa_3` (`IDNormativa`),
 CONSTRAINT `normativi_ibfk_5` FOREIGN KEY (`SifraProizvoda`) REFERENCES `proizvodi` (`SifraProizvoda`) ON UPDATE CASCADE,
 CONSTRAINT `normativi_ibfk_6` FOREIGN KEY (`Sirovina`) REFERENCES `sirovine_nazivi` (`Sifra`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=986 DEFAULT CHARSET=utf8

CREATE TABLE `sirovine` (
 `IDUF` int(11) NOT NULL AUTO_INCREMENT,
 `ID` varchar(255) NOT NULL,
 `IDSirovine` varchar(255) NOT NULL,
 `Dobavljac` varchar(255) NOT NULL,
 `Naziv` varchar(100) NOT NULL,
 `Kolicina` decimal(10,2) NOT NULL,
 `JM` varchar(100) NOT NULL,
 `Cena` decimal(10,2) NOT NULL,
 `Rabat` decimal(4,2) NOT NULL,
 `PDV` decimal(4,2) NOT NULL,
 `CenaBez` decimal(10,2) NOT NULL,
 `CenaSa` decimal(10,2) NOT NULL,
 `DatumUlaza` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `Magacin` int(11) NOT NULL,
 PRIMARY KEY (`IDUF`),
 KEY `Dobavljac` (`Dobavljac`),
 KEY `IDSirovine` (`IDSirovine`),
 KEY `Magacin` (`Magacin`),
 KEY `ID` (`ID`),
 CONSTRAINT `sirovine_ibfk_3` FOREIGN KEY (`Magacin`) REFERENCES `magacini_sirovine` (`id_magacina`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `sirovine_ibfk_4` FOREIGN KEY (`IDSirovine`) REFERENCES `sirovine_nazivi` (`Sifra`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `sirovine_ibfk_5` FOREIGN KEY (`Dobavljac`) REFERENCES `dobavljaci` (`IDDobavljaca`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8


Hvala!
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat14.09.2015. u 12:39 - pre 104 meseci
Na prvu loptu, ne treba ti sum(sirovine.Kolicina) već samo sirovine.Kolicina u izrazu za račun stanja.
E sad, verovatno ni to neće do kraja biti dobro ako imaš sirovinu u više magacina.
 
Odgovor na temu

bane1234

Član broj: 327433
Poruke: 41
*.cnt.rs.



+1 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat14.09.2015. u 12:52 - pre 104 meseci
To je to, radi! Hvala puno! Radi i u vise magacina(na brzinu sto sam probao) mada taj deo jos treba da istestiram.
 
Odgovor na temu

bane1234

Član broj: 327433
Poruke: 41
*.cnt.rs.



+1 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat14.09.2015. u 13:15 - pre 104 meseci
Ipak ne radi, sad dobro skida sa stanja ali kad unesem u magacin(ulaz sirovina) ne povecava stanje... mislim da mora ici sum.... ali onda opet uvecava rezultat
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat14.09.2015. u 13:54 - pre 104 meseci
Pojasni malo šta ti je koja količina u kojoj tabeli.
Npr. da li jedna ista sirovina može da bude u više magacina,
i šta predstavlja Kolicina u Sirovina tabeli (količinu te sirovine
u tom magacinu ili šta)?

I na kraju, šta trebaš da dobiješ kao rezultat, makar i opisno
(ja vidim otprilike šta ti treba ali nisam siguran, nejasno je).
 
Odgovor na temu

bane1234

Član broj: 327433
Poruke: 41
*.cnt.rs.



+1 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat14.09.2015. u 14:02 - pre 104 meseci
kolicina u tabeli sirovine je kolicina koja ulazi u magacin po sifri sirovine, u toj tabeli su svi ulazi u magacin.
kolicina na radnom nalogu je kolicina proizvoda koja treba da se proizvede, odatle se vuce normativ koji ima kolicinu sirovine koja se potrosi za neki proizvod, znaci kolicina sa radnog naloga * kolicina sa normativa je utrosak sirovine...
Da, ista sirovina moze biti u vise magacina.
Kao rezultat treba da dobijem stanje sirovina po magacinima(naravno ukoliko ima vise magacina, taj deo je fleksibilno napravljen - moze da radi sa jednim ili vise magacinau zavisnosti od potreba firme)
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat15.09.2015. u 10:45 - pre 104 meseci
Da, tako sam i mislio al' nisam bio načisto.

Pošto za istu sirovinu u istom magacinu možeš da imaš više rekorda (ulaza)
ne preostaje ti ništa drugo nego da uradiš prvo sumiranje i grupisanje
po sirovina-magacin i onda dalje join na te rezultate (umesto kao sada direkt sa sirovine).
Dakle:

Code:

SELECT ...
FROM (SELECT IDSirovine, Naziv, Magacin, SUM(Kolicina) AS Kolicina FROM Sirovine GROUP BY IDSirovine, Magacin) AS Sirovine
left join(radni_nalozi inner join normativi on normativi ...
...


Ne radim često ovakve upite, sad ne znam da li postoji neki bolji/elegantniji način
da se radi sumiranje po dve različite linije (seta podataka) osim ovog što sam napisao.
Ako neko zna bolje, neka napiše, i mene interesuje.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: pomoc oko upita, ne vraca tacan rezultat15.09.2015. u 11:22 - pre 104 meseci
Da li ti je ovo za vežbu, ili je realan problem?

U svakom slučaju, baza je loše dizajnirana.

Evo šta ne valja:

1. jedan radni nalog je vezan za jedan normativ i jedan magacin. Prema ostatku tabela, ispada da po jednom radnom nalogu može da se izda samo jedna sirovina iz samo jednog magacina. Šta ako neki proizvod zahteva više od jedne sirovine, a čak i ako zahteva jednu sirovinu, šta ako je količina te sirovine u bilo kom magacinu nedovoljna, pa mora da se izda iz više magacina

2. zašto dva ista ključa u tabeli nad istim poljem normativ (normativ i normativ_2)

3. zašto dva ID-a u normativima (ID i IDNormativa). Pa čak i da su ti potrebni, zašto, o zašto, foreign key iz radnih naloga gleda na IDNormativa koji nije UNIQUE umesto na ID. ID je primarni i on MORA (ne mora, ali bi bilo dobro) da bude prenet kao foreign key u radne naloge.

4. zašto opet više indeksa (čak 3) nad istim poljem.

Čak i ako su ovo sitne zamerke, šta se dešava ako se normativ promeni. Nigde ne postoji ograničenje da se ne može promeniti, pa bi to izmenilo potrošnju sirovina u prošlosti.

Kako ide radni proces?

Ja, kako zamišljam, izdavanje radnog naloga NEMA VEZE sa izdavanjem robe (sirovine) iz magacina. Pretpostavljam da neko izda radni nalog, pa da onaj koji je dobio radni nalog ide do magacina gde mu magacioner izdaje sirovinu.

Zato je totalno nelogično da se u magacinu beleži samo ulaz, a ne i izlaz robe...

A i dizajn sirovina je nelogičan. Podaci koji se beleže za ulaz robe su po svojoj prirodi više za fakturu i dostavnicu a ne za magacin. Magacin treba da ima ulaz i izlaz robe, datume i slične stvari, a cene i dobavljači tu nemaju šta da traže.
 
Odgovor na temu

[es] :: MySQL :: pomoc oko upita, ne vraca tacan rezultat

[ Pregleda: 2370 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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