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