Ik heb al even zoeken op dit probleem maar kom er niet uit.
Probleem is als volgt : personen kunnen hun aantal werkuren per dag ingeven en dit wordt opgeslaan in de tabel copy_work. Nu is het de bedoeling dat men kan zien, wie nog niets heeft ingevuld voor een bepaalde dag. Ik heb daar een werkende query voor, maar deze gaat enorm traag (copy_work bevat ong 200.000 records)
De database ziet er als volgt uit:
tabel copy principal:
- principalid
- projectid
- ...
tabel copy_work:
- workid
- workdate
- workhours
- workprincipalid (dit is dus de link naar de andere tabel)
De query hieronder werkt dus, maar is te traag.
Wat ik dan geprobeerd heb is om eerst de subquery uit te voeren en de resultaten op te slaan in een tijdelijke tabel. Daarna dacht ik van de id's die in de tijdelijk tabel staan te vergelijken met de id's in de tabel met personen, maar blijkt dus dat er voor elke waarde uit de ene tabel vergeleken wordt met elke waarde uit de 2e tabel, wat resulteert in dubbele resultaten.
Nu heb ik mij al suf gezocht en heb een bijna werkende query :
waarbij de 3 achteraan het aantal records is in de tijdelijke tabel-1
Nu dacht ik dat het mogelijk zou zijn om een count() van de 2e tabel te gebruiken en deze zou dan dynamisch zijn, maar om de een of andere reden, is die count verschillend als er wel een overeenkomst gevonden wordt en zit ik dus een beetje vast.
Hopelijk weten jullie of het mogelijk is om dit probleem op te lossen, zoniet zal men enorm lang op de data moeten wachten.
Probleem is als volgt : personen kunnen hun aantal werkuren per dag ingeven en dit wordt opgeslaan in de tabel copy_work. Nu is het de bedoeling dat men kan zien, wie nog niets heeft ingevuld voor een bepaalde dag. Ik heb daar een werkende query voor, maar deze gaat enorm traag (copy_work bevat ong 200.000 records)
De database ziet er als volgt uit:
tabel copy principal:
- principalid
- projectid
- ...
tabel copy_work:
- workid
- workdate
- workhours
- workprincipalid (dit is dus de link naar de andere tabel)
De query hieronder werkt dus, maar is te traag.
code:
1
2
3
4
5
6
| $query = "SELECT copy_principal.PRINLOGINNAME,copy_principal.PRINID
FROM copy_principal
WHERE copy_principal.PRINID
NOT IN (SELECT copy_work.WORKPRINCIPLEID FROM copy_work
WHERE copy_work.WORKDATE=to_date('".$today."','yyyymmdd'))
ORDER BY copy_principal.PRINID"; |
Wat ik dan geprobeerd heb is om eerst de subquery uit te voeren en de resultaten op te slaan in een tijdelijke tabel. Daarna dacht ik van de id's die in de tijdelijk tabel staan te vergelijken met de id's in de tabel met personen, maar blijkt dus dat er voor elke waarde uit de ene tabel vergeleken wordt met elke waarde uit de 2e tabel, wat resulteert in dubbele resultaten.
Nu heb ik mij al suf gezocht en heb een bijna werkende query :
code:
1
2
3
4
5
| SELECT copy_principal.PRINLOGINNAME, copy_principal.PRINID FROM copy_principal, TEMP WHERE copy_principal.PRINID != TEMP.WORKPRINCIPLEID GROUP by copy_principal.PRINID, copy_principal.PRINLOGINNAME HAVING count(copy_principal.PRINID)>3 |
waarbij de 3 achteraan het aantal records is in de tijdelijke tabel-1
Nu dacht ik dat het mogelijk zou zijn om een count() van de 2e tabel te gebruiken en deze zou dan dynamisch zijn, maar om de een of andere reden, is die count verschillend als er wel een overeenkomst gevonden wordt en zit ik dus een beetje vast.
Hopelijk weten jullie of het mogelijk is om dit probleem op te lossen, zoniet zal men enorm lang op de data moeten wachten.
[ Voor 3% gewijzigd door Verwijderd op 18-03-2005 13:45 ]