Tabel opbouwen en values vullen d.m.v. 1 query
Ik heb een vraag over MYSQL i.c.m. PHP.
Ik ben bezig om zelf een soort urenregistratiesysteem te maken waarin collega's hun uren kunnen bijhouden op de projecten, gekoppeld aan klanten (hierna assignments genoemd) waar ze werken. Dit kunnen ze per week invullen. (zie http://www.familieselles.nl/question/image.jpg)
Hiervoor heb ik 5 tabellen gemaakt, te weten:
- employees
- customers
- projects
- assignments
- timesheet
De week die getoond wordt, wordt opgebouwd d.m.v. onderstaande query.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// Deze query gaat goed
// D.m.v. een while lus wordt de tabel getoond zoals je in de link kunt zien
$sql = "SELECT ".$assignments.".assignment_id,
".$assignments.".customer_id,
".$assignments.".employee_id,
".$assignments.".project_id,
".$assignments.".time_type,
".$assignments.".allowed_time,
".$assignments.".allowed_extra_time,
".$assignments.".start_date,
".$assignments.".end_date,
".$assignments.".assignment_active,
".$projects.".project_id,
".$projects.".projectname,
".$projects.".projectcode,
".$customers.".customer_id
FROM ".$assignments.",".$projects.",".$customers."
WHERE ".$assignments.".employee_id='".$employee_id."'
AND ".$assignments.".project_id=".$projects.".project_id
AND ".$assignments.".customer_id=".$customers.".customer_id
AND ".$assignments.".assignment_active=1
ORDER BY ".$customers.".customername ASC";
?>
// Deze query gaat goed
// D.m.v. een while lus wordt de tabel getoond zoals je in de link kunt zien
$sql = "SELECT ".$assignments.".assignment_id,
".$assignments.".customer_id,
".$assignments.".employee_id,
".$assignments.".project_id,
".$assignments.".time_type,
".$assignments.".allowed_time,
".$assignments.".allowed_extra_time,
".$assignments.".start_date,
".$assignments.".end_date,
".$assignments.".assignment_active,
".$projects.".project_id,
".$projects.".projectname,
".$projects.".projectcode,
".$customers.".customer_id
FROM ".$assignments.",".$projects.",".$customers."
WHERE ".$assignments.".employee_id='".$employee_id."'
AND ".$assignments.".project_id=".$projects.".project_id
AND ".$assignments.".customer_id=".$customers.".customer_id
AND ".$assignments.".assignment_active=1
ORDER BY ".$customers.".customername ASC";
?>
In de tabel employees staan de naam en een employee_id van de gebruiker
In de tabel customers staat de naam, een afkorting en een customer_id van de klant
In de tabel project staat de naam, een afkorting en een project_id van het project
In de tabel assignments staat een assignment_id, een emplyee_id,een customer_id en een project_id
In de tabel timesheet staat een timesheet_id, een assignment_id, de dag waarop uren zijn ingevuld (jjjj-mm-dd) en de uren
Wanneer er uren zijn ingevuld voor een bepaalde dag, bv 27-7-2008, dan dienen deze opgevraagd te worden uit de tabel timesheet a.d.h.v. een assignment_id en de dag waarop de uren zijn ingevuld. Het lijkt mij handig om dit te doen met 1 query, zie de 2e query in onderstaande code, maar die gaat niet goed, zie http://www.familieselles.nl/question/image2.jpg voor afbeelding 2.
Kan dit uberhaupt, zo ja, wat doe ik dan fout.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
// Deze query gaat niet goed, er worden nu per assignment die voorkomen
// in de tabel timesheet eenzelfde opdracht getoond
// In de tabel timesheet staan nu maar 4 resultaten gekoppeld aan
// de assignment Belastingdienst
$sql = "SELECT ".$assignments.".assignment_id,
".$assignments.".customer_id,
".$assignments.".employee_id,
".$assignments.".project_id,
".$assignments.".time_type,
".$assignments.".allowed_time,
".$assignments.".allowed_extra_time,
".$assignments.".start_date,
".$assignments.".end_date,
".$assignments.".assignment_active,
".$projects.".project_id,
".$projects.".projectname,
".$projects.".projectcode,
".$customers.".customer_id,
".$customers.".customername,
".$customers.".customercode,
".$timesheet.".timesheet_id,
".$timesheet.".assignment_id,
".$timesheet.".day,
".$timesheet.".hours
FROM ".$assignments.",".$projects.",".$customers.",".$timesheet."
WHERE ".$assignments.".employee_id='".$employee_id."'
AND ".$assignments.".project_id=".$projects.".project_id
AND ".$assignments.".customer_id=".$customers.".customer_id
AND ".$timesheet.".assignment_id=".$assignments.".assignment_id
AND ".$assignments.".assignment_active=1
ORDER BY ".$customers.".customername ASC";
?>
// Deze query gaat niet goed, er worden nu per assignment die voorkomen
// in de tabel timesheet eenzelfde opdracht getoond
// In de tabel timesheet staan nu maar 4 resultaten gekoppeld aan
// de assignment Belastingdienst
$sql = "SELECT ".$assignments.".assignment_id,
".$assignments.".customer_id,
".$assignments.".employee_id,
".$assignments.".project_id,
".$assignments.".time_type,
".$assignments.".allowed_time,
".$assignments.".allowed_extra_time,
".$assignments.".start_date,
".$assignments.".end_date,
".$assignments.".assignment_active,
".$projects.".project_id,
".$projects.".projectname,
".$projects.".projectcode,
".$customers.".customer_id,
".$customers.".customername,
".$customers.".customercode,
".$timesheet.".timesheet_id,
".$timesheet.".assignment_id,
".$timesheet.".day,
".$timesheet.".hours
FROM ".$assignments.",".$projects.",".$customers.",".$timesheet."
WHERE ".$assignments.".employee_id='".$employee_id."'
AND ".$assignments.".project_id=".$projects.".project_id
AND ".$assignments.".customer_id=".$customers.".customer_id
AND ".$timesheet.".assignment_id=".$assignments.".assignment_id
AND ".$assignments.".assignment_active=1
ORDER BY ".$customers.".customername ASC";
?>
M.v.g. Wim
Groeten
Wim