Ik ga het even versimpeld uitleggen:
Ben bezig met takensysteem, daarbij hebben we 3 tables:
- trajecten: traject_id, website, startdate, timespent, hours
- taken: taak_id, name, sort
- traject_taken: tt_id, traject_id, task_id, prio, status
In de trajecten tabel zie je dus startdate, timespent en hourspermonth. Kortom:
Klant 1 (traject_id) met website www.google.nl (website) is gestart met een traject op 01-11-2010 (startdate), hij heeft 1 uur per maand (hours) en daarvan is nog niks gebruikt (timespent).
Taken bevat een aantal standaard (SEO)-taken die wij afronden in een bepaalde volgorde (sort).
Traject Taken is een tabel met daarin de combinatie en of een taak eventuele prioriteit heeft (1-5).
Ik wil een overzicht met daarin:
tt_id, sort, website, name, timespent, timetospent, percentage ongebruikte tijd, prio
Dan kom ik op de volgende query:
Het probleem is nu, dat ik van elk traject alle taken krijg, terwijl dat ik per traject de taak met de laagste sort wil.
Krijg ik dat voor elkaar met een INNER JOIN? Zoja hoe? Want een GROUP BY trajecten.traject_id werkt niet.
Dus wie is hier de SQL heer en meester?
Ben bezig met takensysteem, daarbij hebben we 3 tables:
- trajecten: traject_id, website, startdate, timespent, hours
- taken: taak_id, name, sort
- traject_taken: tt_id, traject_id, task_id, prio, status
In de trajecten tabel zie je dus startdate, timespent en hourspermonth. Kortom:
Klant 1 (traject_id) met website www.google.nl (website) is gestart met een traject op 01-11-2010 (startdate), hij heeft 1 uur per maand (hours) en daarvan is nog niks gebruikt (timespent).
Taken bevat een aantal standaard (SEO)-taken die wij afronden in een bepaalde volgorde (sort).
Traject Taken is een tabel met daarin de combinatie en of een taak eventuele prioriteit heeft (1-5).
Ik wil een overzicht met daarin:
tt_id, sort, website, name, timespent, timetospent, percentage ongebruikte tijd, prio
Dan kom ik op de volgende query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| SELECT taken.tt_id taken.sort, trajecten.website, taken.sort, taken.timespent (FLOOR((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(trajecten.startdate)) / 2629743) + 1) * trajecten.hours * 3600 AS timetospent, 100 - (trajecten.timespent / ((FLOOR((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(trajecten.start)) / 2629743) + 1) * trajecten.hours * 3600) * 100) AS percentage, traject_taken.prio FROM taken, trajecten, traject_taken WHERE trajecten.traject_id = traject_taak.traject_id AND traject_taak.taak_id = taken.taak_id AND traject_taak.status = 1 ORDER BY traject_taken.prio, percentage, taken.sort |
Het probleem is nu, dat ik van elk traject alle taken krijg, terwijl dat ik per traject de taak met de laagste sort wil.
Krijg ik dat voor elkaar met een INNER JOIN? Zoja hoe? Want een GROUP BY trajecten.traject_id werkt niet.
Dus wie is hier de SQL heer en meester?