vyber poslednych dobrych verzii (pomale)

Martin Spevak singer na fornax.sk
Úterý Leden 27 10:16:34 CET 2004


Zdravim,
robim na jednej praci a potrebujem vybrat nejakym sposobom posledne dobre
verzie. Udaje su ulozene v 4 tabulkach (skratene by som ich zapisat takto)

[ProjectPart]: idProjectPart, projectName
[ProjectVer]:  idProjectVer, idProjectPart vermaj, vermin
(z coho verziu ziskavam vermaj.vermin)
[ProjectFile]: idProjectFile, idProjectVer, idLang (tu je dalej OID na
subory)
[HaveTest]:    idHaveTest, idProjectFile isOK (isOK je boolean)

moj problem je, ako vypisat vsetky posledne dobre verzie. Robim to
nasledovne:

1. select:
SELECT 	projectpart.idprojectpart,
	max(vermin) as vermin,
	max(vermaj) as vermaj
	FROM 	ProjectPart, ProjectVer, ProjectFile
	WHERE 	ProjectPart.idProjectPart=ProjectVer.idProjectPart AND
		ProjectVer.idProjectVer=ProjectFile.idProjectVer AND
		HaveTest.idProjectFile=ProjectFile.idProjectFile AND
		isOK='t'
	GROUP BY ProjectPart.idProjectPart

Z prveho selektu ziskam vsetky trojice (ID projektu, posledna dobra
verzia), nemozem brat priamo idProjectVer, pretoze je to primarny kluc a
pre kazdy riadok je iny. A Kedze spravnost suboru je viazana cez
ProjectFile, riadkov moze byt viac, pretoze mozem mat viacero suborov pre
rozdielne jazykove mutacie.
Takze teraz potrebujem k vybranym udajom zistit idProjectVer, co spravim
dasim selektom, ktory je vyskladany v PHP a zda sa, ze je dost nesikovny.

2. select:
SELECT idPorojectVer
	FROM 	ProjectVer
	WHERE
	(idProjectPart=<prva_hod> AND vermin=<hod> AND vermaj=<hod>) OR
	(idProjectPart=<hod> AND vermin=<hod> AND vermaj=<hod>) OR...

co je dost velky selekt pri vekom pocte aplikacii a dost pomaly, pretoze
je tam same OR...

No a teraz, kedze uz mam ID vsetkych poslednych verzii pre vsetky
aplikacie, vyberam udaje o vsetkych aplikaciach v dalsom selekte:

3. select:
       "SELECT ProjectFile.idProjectFile, projectpart,
                vermin || '.' || vermaj as version, langgrp
          FROM  ProjectPart, ProjectVer, ProjectFile, HaveTest
          WHERE
		ProjectVer.idProjectVer IN (hodnoty zo selektu 2)
              	ProjectFile.idProjectFile=pHaveTest.idProjectFile AND
              	isok='t' AND
              	ProjectVer.idProjectPart=ProjectPart.idProjectPart AND
		ProjectFile.idProjectVer=ProjectVer.idProjectVer AND
                blanggrp.idblanggrp=pprojectpartfile.idblanggrp AND
         GROUP BY
              pprojectpartfile.idpprojectpartfile, projectpart,
              version, langgrp,
         ORDER BY
              projectpart, version");

V tomto selekte musim mat znova otestovanie na isok='t', pretoze verzia
1.0 v slovencine moze byt funkcna, ale v nemcine moze obsahovat chybu...
(preto som tam pridal uz aj vazbu na jazyk...langgrp)

Cele sa mi to zda byt priliz zlozite a naviac host pomale pri vacsom pocte
poloziek. Nema niekto napad ako to zrychlit? pripadne ziskat tie udaje z
nejako inak?... skusim vsetko ;-)

singer

---
         _____
 ___________(_)_______ _______ ______ ________
 __  ___/__  / __  __ \__  __ `/_  _ \__  ___/ _________CRAZY user_________
 _(__  ) _  /  _  / / /_  /_/ / /  __/_  /                                /
 /____/  /_/   /_/ /_/ _\__, /  \___/ /_/ singer na fornax.elf.stuba.sk     /
                       /____/             http://fornax.elf.stuba.sk/~singer
Martin Spevak				  tel.c.: 0903 233 040         /
Karloveska 6, 841 04, Bratislava, Slovensko___________________________/




Další informace o konferenci Test