Datums vergelijken en een actie uitvoeren
Factuurdatum is een TIMESTAMP (current_timestamp) en vervaldatum is een DATE veld. Om de vervaldatum te berekenen heb ik CURDATE() + INTERVAL 7 DAY gebruikt tijdens het opslaan in de database.
Tot nu toe heb ik dit geprobeerd, maar dat werkt blijkbaar niet:
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
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
<?php
$sql = "SELECT
f.factnr,
f.contact_id,
f.titel,
f.status,
f.type,
f.factuurdatum,
f.vervaldatum,
f.verzonden,
c.bedrijfsnaam,
SUM(f.totaal) as ft
FROM
facturen f
JOIN
contacten c
ON
f.contact_id = c.id
GROUP BY
f.factnr";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res))
{
?>
<tr>
<?php if ($row['factuurdatum'] > $row['vervaldatum']) { ?>
<td><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php } else { ?>
<td style="background-color:#CCC;"><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php if ($row['verzonden'] == 'ja') { ?>
<td class="center"><i class="fa fa-check-square-o"></i></td>
<?php } else { ?>
<td class="center"></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
$sql = "SELECT
f.factnr,
f.contact_id,
f.titel,
f.status,
f.type,
f.factuurdatum,
f.vervaldatum,
f.verzonden,
c.bedrijfsnaam,
SUM(f.totaal) as ft
FROM
facturen f
JOIN
contacten c
ON
f.contact_id = c.id
GROUP BY
f.factnr";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res))
{
?>
<tr>
<?php if ($row['factuurdatum'] > $row['vervaldatum']) { ?>
<td><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php } else { ?>
<td style="background-color:#CCC;"><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php if ($row['verzonden'] == 'ja') { ?>
<td class="center"><i class="fa fa-check-square-o"></i></td>
<?php } else { ?>
<td class="center"></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
Mededeling: dezelfde post staat ook op: http://www.pfz.nl/forum/topic/11044-datums-met-elkaar-vergelijken-en-een-actie-uitvoeren/
Gewijzigd op 05/01/2015 12:20:06 door Brecht S
Verder zie ik niet dat je factuurdatum ophaalt en waar komt $vervaldatum vandaan?
Gewijzigd op 05/01/2015 12:19:30 door Brecht S
Brecht S op 05/01/2015 12:06:28:
Factuurdatum is een TIMESTAMP (current_timestamp) en vervaldatum is een DATE veld.
Dus je vergelijkt nu een integer (timestamp) met een datum (date).
Maak van beiden eens een datum.
Gewijzigd op 05/01/2015 12:34:58 door Brecht S
before insert: SET factuurdatum = NOW();
Maar misschien ook wel belangrijk: in de openingspost staat een query waarin iets van 8 kolommen nog ontbreken in het stuk GROUP BY: alle kolommen die in SELECT staan, moeten daar genoemd worden. (behalve SUM())
http://wiki.pfz.nl/group-by
@Ivo P: wat bedoel je juist met before insert regel? Van de GROUP BY wist ik dat niet. Werkt nogthans goed hier zonder die kolomnamen in de GROUP BY? Dit kan ik wel nog aanpassen als dit nodig zou zijn.
Wat zie je dan?
Brecht S op 05/01/2015 12:49:40:
Werkt nogthans goed hier zonder die kolomnamen in de GROUP BY? Dit kan ik wel nog aanpassen als dit nodig zou zijn.
geeft dus toevallig het resultaat wat je wenste en verwachtte en daarnaast onderdruk je kennelijk de foutmelding die erbij hoort te verschijnen.
Zeker als het om financiële gegevens gaat, is zekerheid over de juistheid van de resultaten wel fijn.
- SanThe - op 05/01/2015 12:23:27:
Dus je vergelijkt nu een integer (timestamp) met een datum (date).
Maak van beiden eens een datum.
Brecht S op 05/01/2015 12:06:28:
Factuurdatum is een TIMESTAMP (current_timestamp) en vervaldatum is een DATE veld.
Dus je vergelijkt nu een integer (timestamp) met een datum (date).
Maak van beiden eens een datum.
Een timestamp in MySQL is geen integer, maar gewoon een datum.
Echter is in vergelijking met een datetime het bereik anders en wordt bij een insert of update automatisch op de huidige datum/tijd gezet indien de waarde niet is opgeven.
Je kan dat met een date of datetime zelf simuleren door CURRENT_DATE of NOW() in de query te plaatsen.
Ivo P op 05/01/2015 12:39:28:
Maar misschien ook wel belangrijk: in de openingspost staat een query waarin iets van 8 kolommen nog ontbreken in het stuk GROUP BY: alle kolommen die in SELECT staan, moeten daar genoemd worden. (behalve SUM())
http://wiki.pfz.nl/group-by
http://wiki.pfz.nl/group-by
In theorie werkt dat zo, maar in de praktijk kan je vaak de kolommen waarvan de waarde niet wijzigt t.o.v. de kolommen waarop je gegroepeerd beter weglaten zodat indexen gebruikt kunnen worden bij het sorteren.
Gewijzigd op 05/01/2015 13:00:56 door Ger van Steenderen
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
$sql = "SELECT
f.factnr,
f.contact_id,
f.titel,
f.status,
f.type,
f.factuurdatum,
f.vervaldatum,
f.verzonden,
c.bedrijfsnaam,
SUM(f.totaal) as ft,
CASE WHEN vervaldatum > NOW() AND f.betaald != 'ja' THEN 1 ELSE 0 END AS vervallen
FROM
facturen f
JOIN
contacten c
ON
f.contact_id = c.id
GROUP BY
f.factnr";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res))
{
?>
<tr>
<?php if ($row['vervallen'] == 1) { ?>
<td><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php } else { ?>
<td style="background-color:#CCC;"><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php if ($row['verzonden'] == 'ja') { ?>
<td class="center"><i class="fa fa-check-square-o"></i></td>
<?php } else { ?>
<td class="center"></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
$sql = "SELECT
f.factnr,
f.contact_id,
f.titel,
f.status,
f.type,
f.factuurdatum,
f.vervaldatum,
f.verzonden,
c.bedrijfsnaam,
SUM(f.totaal) as ft,
CASE WHEN vervaldatum > NOW() AND f.betaald != 'ja' THEN 1 ELSE 0 END AS vervallen
FROM
facturen f
JOIN
contacten c
ON
f.contact_id = c.id
GROUP BY
f.factnr";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res))
{
?>
<tr>
<?php if ($row['vervallen'] == 1) { ?>
<td><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php } else { ?>
<td style="background-color:#CCC;"><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php if ($row['verzonden'] == 'ja') { ?>
<td class="center"><i class="fa fa-check-square-o"></i></td>
<?php } else { ?>
<td class="center"></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
Gewijzigd op 05/01/2015 13:08:22 door Brecht S
Je vergelijkt een datum met een datum/tijd gebruik CURRENT_DATE
Toevoeging op 05/01/2015 14:04:45:
[Opgelost] Er was een probleem met het > die moest < zijn in de query.
Voor iedereen die hier ook een probleem mee heeft post ik even de volledig juiste code hieronder. Ik heb ook de NOW() in de query vervangen door CURRENT_DATE:
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
65
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
65
<?php
$sql = "SELECT
f.factnr,
f.contact_id,
f.titel,
f.status,
f.type,
f.datum,
f.vervaldatum,
f.verzonden,
c.bedrijfsnaam,
SUM(f.totaal) as ft,
CASE WHEN vervaldatum < CURRENT_DATE AND f.betaald != 'ja' THEN 1 ELSE 0 END AS vervallen
FROM
facturen f
JOIN
contacten c
ON
f.contact_id = c.id
GROUP BY
f.factnr";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res))
{
?>
<tr>
<?php if ($row['vervallen'] <> 1) { ?>
<td><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php } else { ?>
<td style="background-color:#CCC;"><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php if ($row['verzonden'] == 'ja') { ?>
<td class="center"><i class="fa fa-check-square-o"></i></td>
<?php } else { ?>
<td class="center"></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
$sql = "SELECT
f.factnr,
f.contact_id,
f.titel,
f.status,
f.type,
f.datum,
f.vervaldatum,
f.verzonden,
c.bedrijfsnaam,
SUM(f.totaal) as ft,
CASE WHEN vervaldatum < CURRENT_DATE AND f.betaald != 'ja' THEN 1 ELSE 0 END AS vervallen
FROM
facturen f
JOIN
contacten c
ON
f.contact_id = c.id
GROUP BY
f.factnr";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res))
{
?>
<tr>
<?php if ($row['vervallen'] <> 1) { ?>
<td><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php } else { ?>
<td style="background-color:#CCC;"><?php echo $row['factnr']; ?></td>
<td><?php echo $row['bedrijfsnaam']; ?></td>
<td><?php echo $row['titel']; ?></td>
<td class="center"><?php echo $row['ft']; ?> €</td>
<td><?php echo $row['status']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['vervaldatum']; ?></td>
<?php if ($row['verzonden'] == 'ja') { ?>
<td class="center"><i class="fa fa-check-square-o"></i></td>
<?php } else { ?>
<td class="center"></td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
Gewijzigd op 05/01/2015 17:39:17 door Brecht S