datums weergeven in tabel
en waar komt dan die datum vandaan Davey? komt die uit de database of bereken je dat met php? laat even een klein stukje code zien aub
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
define('INCLUDE_CHECK',true);
require 'inc/connect.php';
$query1="
SELECT
m.id,
m.voornaam,
m.achternaam,
d.check_date,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofaanvragen f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
$sqltitel = mysql_query($query1) or die(mysql_error());
$member = 0; //dit is de pointer om bij te houden met welk lid we werken
$tr = '<tr>';
$tbody = ''; //voor de rijen van de tabel
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>kalender</title>
<style>
table { border-collapse:collapse; }
td, th { border: 1px solid black; width:50px; text-align:center; }
</style>
</head>
<body>
<?php
echo '<h1><img src="/img/titel/Info.png" />Kalender</h1><hr>';
echo '<p>Kalender weergave van geaccepteerde verlofaanvragen</p>';
echo '<table border="1" cellpadding="5"><tr><th colspan="32">Augustus</th>';
while ($row = mysql_fetch_assoc($sqltitel)) {
//controleer of het een ander lid is
if ($row['id'] !== $member) {
$tbody .= $tr . '<td>' . $row['voornaam'] . ' ' . $row['achternaam'] . '</td>';
$member = $row['id'];
$tr = '</tr><tr>';
$thead = '<tr><td> </td>'; //de head voor de titels
}
$thead .= '<td>' . $row['check_date'] . '</td>';
$tbody .= '<td>' . $row['dayoff'] . '</td>';
}
echo $thead . '</tr>';
echo $tbody . '</tr>';
echo '</table>';
?>
</body>
</html>
define('INCLUDE_CHECK',true);
require 'inc/connect.php';
$query1="
SELECT
m.id,
m.voornaam,
m.achternaam,
d.check_date,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofaanvragen f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
$sqltitel = mysql_query($query1) or die(mysql_error());
$member = 0; //dit is de pointer om bij te houden met welk lid we werken
$tr = '<tr>';
$tbody = ''; //voor de rijen van de tabel
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>kalender</title>
<style>
table { border-collapse:collapse; }
td, th { border: 1px solid black; width:50px; text-align:center; }
</style>
</head>
<body>
<?php
echo '<h1><img src="/img/titel/Info.png" />Kalender</h1><hr>';
echo '<p>Kalender weergave van geaccepteerde verlofaanvragen</p>';
echo '<table border="1" cellpadding="5"><tr><th colspan="32">Augustus</th>';
while ($row = mysql_fetch_assoc($sqltitel)) {
//controleer of het een ander lid is
if ($row['id'] !== $member) {
$tbody .= $tr . '<td>' . $row['voornaam'] . ' ' . $row['achternaam'] . '</td>';
$member = $row['id'];
$tr = '</tr><tr>';
$thead = '<tr><td> </td>'; //de head voor de titels
}
$thead .= '<td>' . $row['check_date'] . '</td>';
$tbody .= '<td>' . $row['dayoff'] . '</td>';
}
echo $thead . '</tr>';
echo $tbody . '</tr>';
echo '</table>';
?>
</body>
</html>
Dus via $row['check_date'] krijg ik nu de datums.
Let op dat de checkdate een kolom is uit een derived table, je kan daar dus alle beschikbare datetime functies op uitvoeren (ook MySQL is nog wel eens lief voor de progammeurs)
http://www.w3schools.com/sql/func_date_format.asp
voorbeeldje dat de dag van de maand en de afgekorte naam van de dag van de week toont:
en met de query zet je hem om naar de nederlandse taal
in jouw query verweven:
Davey zie voor de mysql date functions bijvoorbeeld: voorbeeldje dat de dag van de maand en de afgekorte naam van de dag van de week toont:
en met de query zet je hem om naar de nederlandse taal
in jouw query verweven:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SET lc_time_names = 'nl_NL';
SELECT
m.id,
m.voornaam,
m.achternaam,
DATE_FORMAT(d.check_date, '%a %e') AS datetext,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofaanvragen f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
SELECT
m.id,
m.voornaam,
m.achternaam,
DATE_FORMAT(d.check_date, '%a %e') AS datetext,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofaanvragen f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
Gewijzigd op 13/08/2013 21:48:45 door Frank Nietbelangrijk
Als ik de query in phpmyadmin invoer krijg ik een veelbelovend resultaat, echter in php krijg ik de volgende error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT m.id, m.voornaam, m.achternaam, DATE_FORMAT(d.check_dat' at line 2
----edit:
Als ik SET lc_time_names = 'nl_NL'; in de query hou staan krijg ik bovenstaande error.
Om dit op te lossen doe ik nu:
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
mysql_query("SET lc_time_names = 'nl_NL';");
$query1="
SELECT
m.id,
m.voornaam,
m.achternaam,
DATE_FORMAT(d.check_date, '%a %e') AS datetext,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofgeaccepteerd f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
//WHERE m.functie1 = 'Algemeen'
$sqltitel = mysql_query($query1) or die(mysql_error());
$query1="
SELECT
m.id,
m.voornaam,
m.achternaam,
DATE_FORMAT(d.check_date, '%a %e') AS datetext,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofgeaccepteerd f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
//WHERE m.functie1 = 'Algemeen'
$sqltitel = mysql_query($query1) or die(mysql_error());
Is dit de juiste manier om dit aan te pakken? Of is er een betere manier?
In ieder geval heel veel dank zowel Frank als Ger voor de hulp! Heb veel bij geleerd en genoeg leesvoer om nog eens aandachtig door te nemen!:)
Gewijzigd op 13/08/2013 23:00:09 door Davey Mat
twee queries lijkt me prima
Ik wil nu enkel alle vrijdagen, zaterdagen en zondagen van een maand tonen. Ik dacht door het toevoegen van WHERE datetext LIKE 'vr%' OR datetext LIKE 'za%' OR datetext LIKE 'zo%'.
Maar dit werkt niet, omdat datetext niet bestaat volgens de foutmelding. Maar ik wil de datetext uitlezen die ik op regel 7 heb van onderstaand script:
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
mysql_query("SET lc_time_names = 'nl_NL';");
$query1="
SELECT
m.id,
m.voornaam,
m.achternaam,
DATE_FORMAT(d.check_date, '%a %e') AS datetext,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofgeaccepteerd f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
//WHERE datetext LIKE 'vr%' OR datetext LIKE 'za%' OR datetext LIKE 'zo%'
$sqltitel = mysql_query($query1) or die(mysql_error());
$query1="
SELECT
m.id,
m.voornaam,
m.achternaam,
DATE_FORMAT(d.check_date, '%a %e') AS datetext,
IF(f.memberid IS NULL, '-', 'X') dayoff
FROM
(SELECT
@startdate + INTERVAL (@pos := @pos + 1) DAY check_date
FROM
members,
(SELECT @pos := -1,
@startdate := '2013-08-01') a
LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
verlofgeaccepteerd f
ON m.id = f.memberid
AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
//WHERE datetext LIKE 'vr%' OR datetext LIKE 'za%' OR datetext LIKE 'zo%'
$sqltitel = mysql_query($query1) or die(mysql_error());
Gewijzigd op 05/09/2013 15:30:14 door Davey Mat
Respect voor jouw kennis van sql!
Ik kan op google zo 123 niks vinden over 'WEEKDAY', waar zou ik daar meer informatie over kunnen vinden?
Bedankt iig! De query werkt zoals ik wil!
Hoofdstuk 12.7 in de manuel