[ dona @ 24.04.2004. 22:15 ] @
Imam sledece dvije tabele u bazi
Code:

create table promjena (
   idPromjene int(11) not null auto_increment,
   idRobe int(11) not null default '0',
   idKupca int(11) ,
   Datum date,
   Naziv varchar(50),
   idDilera int(11),
   delovodni_broj int(11) not null default '0',
   PromjenaUlaz double(16,2),
   PromjenaIzlaz double(16,2),
   CijenaDobavljaca double(16,3),
   ZavisniTroskovi double(16,2),
   CijenaProdaje double(16,3),
   Porez double(16,2),
   Rabat double(16,2),
   Ambalaza int(11),
   primary key (idPromjene))
   type=MyISAM;

create table roba (
   idRobe int(11) not null auto_increment,
   Sifra_robe bigint(11),
   Naziv varchar(50),
   Autor varchar(50),
   Jed_Mjere varchar(50),
   Poreska_Sifra double(16,2) default '0.00',
   Tip_Ambalaze int(11) not null default '0',
   primary key (idRobe))
   type=MyISAM;


u tabeli roba postoji 700 stavki a u tabeli promjena 1500 stavki

posto mi je trabalo da bih ubrzao upit koriscenje podupita instalirao sam
MySQL 4.1 koji to podrzava, e sad:

posto sam kreirao indexe na idRobe u obje tabele u robi kao UNIQUE a u promjenama NORMAL i izvrsim sledeci upit
Code:

SELECT idrobe,naziv,sifra_robe,Autor,Jed_Mjere,Poreska_Sifra,Tip_Ambalaze,
(SELECT CijenaProdaje FROM promjena WHERE roba.idRobe=promjena.idRobe and cijenaprodaje<>0 ORDER BY datum desc,idpromjene desc limit 1) as cijenaprodaje,
(SELECT CijenaDobavljaca FROM promjena WHERE roba.idRobe=promjena.IdRobe and cijenadobavljaca<>0 ORDER BY datum desc,idpromjene desc LIMIT 1) as cijenadobavljaca,
(SELECT COALESCE(sum(promjenaulaz),0)-COALESCE(sum(promjenaizlaz),0) as Zalihe1 FROM promjena WHERE roba.idRobe=promjena.idRobe) as zalihe
From roba
order by sifra_robe

Puca server tako da se vise ne moze podici bez da se rucno obrisu fajlovi tj. baze sa diska.

Ima li resenje za ovo ili .....???

Edit StRiPy: Dodao sam samo code tag radi bolje preglednosti.
[ Dejan Topalovic @ 25.08.2005. 16:30 ] @
Citat:
dona:
Code:

SELECT idrobe,naziv,sifra_robe,Autor,Jed_Mjere,Poreska_Sifra,Tip_Ambalaze,
(SELECT CijenaProdaje FROM promjena WHERE roba.idRobe=promjena.idRobe and cijenaprodaje<>0 ORDER BY datum desc,idpromjene desc limit 1) as cijenaprodaje,
(SELECT CijenaDobavljaca FROM promjena WHERE roba.idRobe=promjena.IdRobe and cijenadobavljaca<>0 ORDER BY datum desc,idpromjene desc LIMIT 1) as cijenadobavljaca,
(SELECT COALESCE(sum(promjenaulaz),0)-COALESCE(sum(promjenaizlaz),0) as Zalihe1 FROM promjena WHERE roba.idRobe=promjena.idRobe) as zalihe
From roba
order by sifra_robe

Puca server tako da se vise ne moze podici bez da se rucno obrisu fajlovi tj. baze sa diska.

Ima li resenje za ovo ili .....???


Cini mi se da pogresno koristis subselect upite...
Mozda bi trebao da pokusas sa ovim:
Code:

SELECT r.idrobe,r.naziv,r.sifra_robe,r.Autor,r.Jed_Mjere,r.Poreska_Sifra,r.Tip_Ambalaze, 
cp.cijenaprodaje AS CijenaProdaje,
FROM roba r,
(SELECT p.cijenaprodaje AS cijenaprodaje FROM promjena p WHERE r.idRobe=p.idRobe and cijenaprodaje<>0 ORDER BY p.datum desc, p.idpromjene desc limit 1) as cp
...
i tako dalje
Cak nisam ni siguran da li mozes koristiti LIMIT u subselectu, jer koliko se sjecam, to nije radilo ranije...
Mozda ce neko drugi vise znati ...?