Datums vergelijken en een actie uitvoeren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

05/01/2015 12:06:28
Quote Anchor link
Ik heb een factuurdatum en een vervaldatum. Beiden in MySQL. Nu wil ik die datum en vervaldatum gaan vergelijken en als de vervaldatum hoger is dan de factuurdatum moet die row (html tabel met overzicht facturen) gekleurd worden.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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']; ?> &euro;</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']; ?> &euro;</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
 
PHP hulp

PHP hulp

21/11/2024 22:40:01
 
- SanThe -

- SanThe -

05/01/2015 12:13:35
Quote Anchor link
Hier mist nog ']
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if ($row['factuurdatum > $vervaldatum) { ?>

Verder zie ik niet dat je factuurdatum ophaalt en waar komt $vervaldatum vandaan?
 
Brecht S

Brecht S

05/01/2015 12:18:18
Quote Anchor link
Code is aangepast. Sorry had een fout getypt. Beiden haal ik uit de query.
Gewijzigd op 05/01/2015 12:19:30 door Brecht S
 
- SanThe -

- SanThe -

05/01/2015 12:23:27
Quote Anchor link
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.
 
Brecht S

Brecht S

05/01/2015 12:30:07
Quote Anchor link
Ik heb de keuze voor TIMESTAMP gemaakt omdat ik dan CURRENT TIMESTAMP kon gebruiken. Als het niet anders kan zal ik voor datum dus date('Y-m-d') moeten gebruiken denk ik en opslaan in db onder 'datum' en DATE maken van dit veld? Is er dus geen andere oplossing? Anders moet ik ook een aantal pagina's in mijn php gaan wijzigen.
Gewijzigd op 05/01/2015 12:34:58 door Brecht S
 
- SanThe -

- SanThe -

05/01/2015 12:35:36
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if (date('Y-m-d', $row['factuurdatum']) > $row['vervaldatum']) {
 
Ivo P

Ivo P

05/01/2015 12:39:28
Quote Anchor link
als het veel moeite is om NOW() in de insert op te nemen, zou het ook nog met een trigger kunnen:

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
 
Brecht S

Brecht S

05/01/2015 12:49:40
Quote Anchor link
@SanThe: dit werkt dus niet. Probleem blijft hetzelfde.
@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.
 
- SanThe -

- SanThe -

05/01/2015 12:53:06
Quote Anchor link
Doe eens dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo date('Y-m-d', $row['factuurdatum']);
echo $row['vervaldatum'];
?>

Wat zie je dan?
 
Ivo P

Ivo P

05/01/2015 12:56:53
Quote Anchor link
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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/01/2015 13:00:03
Quote Anchor link
- SanThe - op 05/01/2015 12:23:27:
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

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
 
Brecht S

Brecht S

05/01/2015 13:07:13
Quote Anchor link
Ik heb in mijn query de regel CASE WHEN vervaldatum > NOW() AND f.betaald != 'ja' THEN 1 ELSE 0 END AS vervallen opgenomen en dan werkt het wel. Zie hieronder de nieuwe post. Enkel is er nog een klein probleem met de AND hier denk ik want als ik manueel even de kolom betaald op ja zet kleuren de velden nog steeds.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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']; ?> &euro;</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']; ?> &euro;</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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/01/2015 13:10:51
Quote Anchor link
Je vergelijkt een datum met een datum/tijd gebruik CURRENT_DATE
 
Brecht S

Brecht S

05/01/2015 13:37:49
Quote Anchor link
Daar zit het probleem niet volgens mij maar heb het wel even aangepast van NOW() naar 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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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']; ?> &euro;</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']; ?> &euro;</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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.