Help! MySQL

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Location
Brăila
Pana acum faceam round inainte de afisare si am senzatia ca si acum tot asta e solutia. Dar asa mi-e lene...
 

Quark

zis şi Brucan
Sugar daddy
Joined
Nov 6, 2003
Location
the past.
Stati linistiti: conform statisticilor oficiale, in Romania numai 50% din cancere sunt diagnosticate gresit (adica de fapt nu e cancer).
 

puterfixer

Administrator
Sugar daddy
Joined
Oct 30, 2003
Întrebarea e de ce ai avea nevoie să stochezi rezultatele analizelor ca număr de orice fel. Doar fiindcă e număr? Are sens să folosești număr atunci când vrei să faci operațiuni de sumă pe setul de date din acea coloană, după anumite condiții, de exemplu. Dar tu n-o să prelucrezi matematic rezultatele a 15 analize diferite a 5 pacienți. Cel mult îți trebuie să compari rezultatul analizei ț cu limita inferioară și superioară a valorilor normale, ca să scrii alături și vreo alertă sau ceva. Dar asta o poți face și stocând rezultatul ca string (cu validare, să nu aibă litere sau 3 puncte zecimale sau altceva) și făcând conversia în număr doar pentru comparația cu intervalul normal.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Location
Brăila
Am avut azi parte de un mare double facepalm dupa ce am constatat cat de mult poate fi abuzat programul de un user nepriceput.
Nu in sensul ca a facut ceva ce nu trebuia sa faca, ci ca si-a batut singur cuie in talpa si acum vrea sa i le scot eu. Fara sa doara.

Deci exista un tabel "analize" cu cheie primara TID (Test-ID), un al doilea tabel "metode" cu cheie primara MID (Method-ID) si foreign key TID, si un al treilea tabel "rezultate" cu foreign key MID.
Utilizatorul avea sarcina sa introduca numele metodelor la fiecare metoda deja definita. In loc sa faca asta, la fiecare analiza a mai creat o metoda noua unde i-a scris numele. Dupa asta, s-a apucat si a bagat rezultate, evident, la metodele noi create. Problema acum este ca acele metode (cate una la fiecare analiza, vreo 50) nu au intervale de referinta si sunt deci inutilizabile.

Am nevoie de o comanda care, pentru un TID specificat, sa mute rezultatele de la MID-ul mai mare la MID-ul mai mic.

LE: Nu mai e nevoie; s-a rezolvat cu 3 linii in PHP. :smile:
 
Last edited:

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Location
Brăila
Am o problema de performanta. Se dau tabelele (doar esentialul din fiecare):

Cereri [QID cheie, SID nr.proba]
Rezultate [SID, MID, DateV data validarii]
Metode [MID cheie, TID]
Analize [TID cheie]
AnalizeCerute [QID,TID combinatie unica]

Pentru o anumita comanda de analize (QID) imi trebuie o lista colorata cu toate analizele cerute si efectuate, unde culorile sa diferentieze analize validate sau nu. Asadar, am scris urmatoarea comanda:

SELECT MAX(DateV), TID
FROM AnalizeCerute
LEFT JOIN Metode ON AnalizeCerute.TID=Metode.TID
JOIN Cereri ON AnalizeCerute.QID=Cereri.QID
LEFT JOIN Rezultate ON Cereri.SID=Rezultate.SID AND Rezultate.MID=Metode.MID -- observati bucla prin toate 4 tabelele
WHERE QID=?
GROUP BY TID;

Comanda e mai complexa, ca imi trebuie numele analizei, sortare dupa un numar de ordine a analizelor, etc. Am scris doar partea esentiala. Mentionez ca toate coloanele de mai sus sunt chei primare sau parte a unor indecsi, inclusiv DateV, dar sunt folosite si niste coloane din tabelul Analize care nu-s indexate (nume analiza, ordinea analizelor).

Chestia asta se executa in vreo 20 de secunde, probabil din cauza tabelului de rezultate care e foarte mare.
Cum as putea optimiza?
Multumesc.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Location
Brăila
Titlul topicului ar trebui schimbat. Folosesc Firebird.
LEFT JOIN-urile sunt pentru a scoate acele analize care nu au inca rezultate (lipseste randul in Rezultate).
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Location
Brăila
O reordonare a JOIN-urilor si eliminarea unui camp ne-esential a facut ca totul sa redevina instantaneu. :what:
Cred ca asta ar trebui pusa la "probleme neobisnuite". :smile:
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Location
Brăila
N-am vazut sa aibe. Dar am vazut in manual ceva cu execution plan...
Din nefericire nu mai pot reproduce problema. Nu mai stiu cum era inainte si n-am facut backup inainte sa modific. :embarassed: Tin minte doar ca serverul avea 100% CPU si fara activitate pe disc. Daca mai apare vreodata, o sa studiez mai in detaliu. Acum m-am grabit.
 
Top Bottom