Mysql verjaardagen deze week

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martijn Roverts

Martijn Roverts

26/10/2006 22:11:00
Quote Anchor link
Ik wil met onderstaande query de verjaardagen van deze week halen, behalve vandaag. Maar helaas lukt het niet om de verjaardagen van vandaag over te slaan.

Weet iemand een manier? Die ook werk bij de schrikkeljaren en jaren voor 1970?

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
SELECT *,
DAYOFMONTH ( datum ) AS dag,
MONTH ( datum ) AS maand,
(YEAR( CURRENT_DATE( ) ) - YEAR(datum)) AS leeftijd
FROM `verjaardag`  
WHERE
 (
    DAYOFYEAR( CURRENT_DATE( ) ) > DAYOFYEAR( DATE_SUB( datum, INTERVAL 7 DAY ) )
    AND DAYOFYEAR( CURRENT_DATE( ) ) <= DAYOFYEAR( DATE_SUB( datum, INTERVAL 7 DAY ) ) +7
 )
OR
 (
    DAYOFYEAR( CURRENT_DATE( ) ) > DAYOFYEAR( datum ) -7
    AND DAYOFYEAR( CURRENT_DATE( ) ) <= DAYOFYEAR( datum )
 )
ORDER BY maand, dag, leeftijd ASC
 
PHP hulp

PHP hulp

25/04/2024 14:43:03
 
Frank -

Frank -

26/10/2006 22:14:00
Quote Anchor link
Gooi de backtics ` nog even met een grote boog richting prullenbak, dat is de enige juiste plek voor deze zooi.

De jaren voor 1970 zijn geen enkel probleem. Tenzij jij een TIMESTAMP gebruikt, maar dan vraag je ook om problemen... Gebruik een DATETIME en dat probleem is ook weer de wereld uit.

Wanneer je niet de verjaardagen van vandaag wilt hebben, dan moet je nog even een AND toevoegen die de verjaardagen van vandaag buitensluit.
 
Martijn Roverts

Martijn Roverts

26/10/2006 23:16:00
Quote Anchor link
En hoe zou ik dan de verjaardagen van vandaag moeten uitsluiten?
Met dit : DAYOFYEAR( datum ) > (DAYOFYEAR( CURRENT_DATE )+1) lukt dat niet want in een schrikkeljaar veranderd dit.
Zit me hier suf te piekeren hoe ik dit aan zal pakken en met Google kom ik ook niet verder.
Ik maak trouwens gebruik van een DATE field dus dat zit dacht ik wel goed.
 
Jan Koehoorn

Jan Koehoorn

27/10/2006 00:00:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    $sql
= "
        SELECT
            naam,
            CONCAT(YEAR(geboortedatum) , DATE_FORMAT(geboortedatum, '-%m-%d')) AS verjaardag_dit_jaar
        FROM verjaardag
        WHERE WEEK(CURDATE()) = WEEK(CONCAT(YEAR(geboortedatum) , DATE_FORMAT(geboortedatum, '-%m-%d')))
        AND CURDATE() != CONCAT(YEAR(geboortedatum) , DATE_FORMAT(geboortedatum, '-%m-%d'))"
;
?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Martijn Roverts

Martijn Roverts

27/10/2006 15:09:00
Quote Anchor link
@ Jan
Dit is niet de oplossing tot mijn probleem volgens mij?
Waarom gebruik je CONCAT? Je haalt nu heel omslachtig YYYY-MM-DD uit een DATE field? Maar met CURDATE doe je toch hetzelfde? En wat doet WEEK dan voor jouw, precies?

Even mijn voorbeeld duidelijker formuleren:

De opbouw van de tabel is :
CREATE TABLE `verjaardag` (
`id` int(8) NOT NULL auto_increment,
`datum` date NOT NULL default '0000-00-00',
`lid` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`) ) TYPE=MyISAM;

En een deel van de data:
1955-10-26 André Dubbeldam
1988-10-26 Cornélie van Houwelingen
1985-10-26 Linda van Wijngaarden
1960-10-27 Janny Visscher
1960-10-29 Leo Visscher
1950-10-30 Geertje van Kooten
1980-10-31 Jeroen van Andel
2005-11-01 Test naam
1984-11-03 Jurgen Adriaanse
1990-11-07 Hanna van der Ham

Met jouw(Jan) query krijg ik het volgende :
André Dubbeldam 1955-10-26
Cornélie van Houwelingen 1988-10-26
Janny Visscher 1960-10-27
Leo Visscher 1960-10-29
Jeroen van Andel 1980-10-31

Je ziet een jarige in het verleden (gisteren) en de jarige "Test naam" valt toch ook binnen een week?

In feite wil ik alle jarigen binnen nu en zeven dagen en niet die van vandaag. Met die van vandaag wil ik iets anders gaan doen....

@Frank
De reden van dat 1970 erbij zet is dat niemand met het advies van UNIX_TIMESTAMP komt.
Wat die backtopics betreft, waarom geeft PHPMyadmin dit wel? Het werkt ook zonder oke maar snap je opmerking niet zo.
 
K i p

K i p

27/10/2006 15:11:00
Quote Anchor link
dit werkt :-P :


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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
$sql
= "
SELECT
    user, geboortedatum
FROM
    users
WHERE
        DATE_ADD( geboortedatum, INTERVAL( YEAR( CURDATE( ) ) - YEAR( geboortedatum ) ) YEAR )
        BETWEEN
        NOW( )
    AND
        DATE_ADD( NOW( ) , INTERVAL 7 DAY ) ;
"
;
$res = mysql_query($sql) or die("fout:<br />SQL:<br /><pre> ".$sql."</pre><br />Fout:<br />".mysql_error()."<br />ERRNO: <br />".mysql_errno());
if (mysql_num_rows($res) != 1)
{

    echo '<h1>Jarigen komende week:</h1>';
}

else
{
    echo '<h1>Jarige komende week: </h1>';
}

echo '<p>';
if (mysql_num_rows($res) > 0)
{

    while ($rij = mysql_fetch_assoc($res))
    {

        if (isset($_SESSION['userlogin']))
        {

            echo '<a href="http://www.xxx.nl?p=profiel&amp;id='.$rij['id'].'">';
        }

        echo $rij['user'];
        if (isset($_SESSION['userlogin']))
        {

            echo '</a>';
        }

        echo ' is jarig op '.$rij['geboortedatum'].'. <br />'."\n";
    }
}

else
{
    echo '<i>Geen jarigen</i>';
}


echo "\n</p>\n";
echo "\n<p>\n";



$sql2 ="
SELECT user,id,geboortedatum,
CASE
WHEN MONTH( geboortedatum ) < MONTH( CURDATE( ) )
THEN CONCAT( YEAR( CURDATE( ) ) +1, DATE_FORMAT( geboortedatum, '-%m-%d' ) )
WHEN MONTH( geboortedatum ) > MONTH( CURDATE( ) )
THEN CONCAT( YEAR( CURDATE( ) ) , DATE_FORMAT( geboortedatum, '-%m-%d' ) )
WHEN MONTH( geboortedatum ) = MONTH( CURDATE( ) )
THEN
CASE
WHEN DAYOFMONTH( geboortedatum ) < DAYOFMONTH( CURDATE( ) )
THEN CONCAT( YEAR( CURDATE( ) ) +1, DATE_FORMAT( geboortedatum, '-%m-%d' ) )
WHEN DAYOFMONTH( geboortedatum ) >= DAYOFMONTH( CURDATE( ) )
THEN CONCAT( YEAR( CURDATE( ) ) , DATE_FORMAT( geboortedatum, '-%m-%d' ) )
END
END AS volgende_verjaardag
FROM users
ORDER BY volgende_verjaardag ASC
LIMIT "
.mysql_num_rows($res).",5
"
;
$res2 = mysql_query($sql2) or die("fout:<br />SQL:<br /><pre> ".$sql2."</pre><br />Fout:<br />".mysql_error()."<br />ERRNO: <br />".mysql_errno());
if (mysql_num_rows($res2) > 0)
{

    echo '<h1>Volgende 5 jarigen:</h1>';
}

echo '<ul>';
while ($rij2 = mysql_fetch_assoc($res2))
{

    echo '<li>';
    if (isset($_SESSION['userlogin']))
    {

        echo '<a href="http://www.xxx.nl?p=profiel&amp;id='.$rij2['id'].'">'.$rij2['user'].'</a>';
    }

    else
    {
        echo $rij2['user'];
    }

    echo ' is jarig op '.$rij2['volgende_verjaardag'].'</li>'."\n";
}

?>
 
Jan Koehoorn

Jan Koehoorn

27/10/2006 15:15:00
Quote Anchor link
Roverts schreef op 27.10.2006 15:09:
@ Jan
Dit is niet de oplossing tot mijn probleem volgens mij?
Waarom gebruik je CONCAT? Je haalt nu heel omslachtig YYYY-MM-DD uit een DATE field? Maar met CURDATE doe je toch hetzelfde? En wat doet WEEK dan voor jouw, precies?


Ik neem aan dat in dat DATE field de geboortedatum van een persoon staat? Dan geeft die CONCAT die ik gebruik de verjaardag in het huidige jaar. Heb je de query uitgetest? Uit je "volgens mij" maak ik op van niet?
 
Jan Koehoorn

Jan Koehoorn

27/10/2006 15:19:00
Quote Anchor link
Quote:
Met jouw(Jan) query krijg ik het volgende :
André Dubbeldam 1955-10-26
Cornélie van Houwelingen 1988-10-26
Janny Visscher 1960-10-27
Leo Visscher 1960-10-29
Jeroen van Andel 1980-10-31

Je ziet een jarige in het verleden (gisteren) en de jarige "Test naam" valt toch ook binnen een week?

In feite wil ik alle jarigen binnen nu en zeven dagen en niet die van vandaag. Met die van vandaag wil ik iets anders gaan doen....

Zo heb je je vraag niet geformuleerd aan het begin van je topic! Je vroeg dit:
Quote:
Ik wil met onderstaande query de verjaardagen van deze week halen, behalve vandaag. Maar helaas lukt het niet om de verjaardagen van vandaag over te slaan.

De verjaardagen van deze week betekent: als het nu woensdag is, alle verjaardagen vanaf maandag tot zondag, behalve woensdag. Je kunt de week ook op zondag beginnen eventueel. Als je de verjaardagen van de komende zeven dagen wilt, is dat een andere query.
 
Martijn Roverts

Martijn Roverts

27/10/2006 15:27:00
Quote Anchor link
Quote:
Ik neem aan dat in dat DATE field de geboortedatum van een persoon staat? Dan geeft die CONCAT die ik gebruik de verjaardag in het huidige jaar. Heb je de query uitgetest? Uit je "volgens mij" maak ik op van niet?


In het DATE field staan idd de geboortedata. De query heb ik getest en heb ik hierboven geplaatst.

@Boris();
Ik zal hem gaan testen ziet er leuk uit, kan ik best wat mee. Maar ik zie nergens de filter om vandaag uit te sluiten?
 
Jan Koehoorn

Jan Koehoorn

27/10/2006 15:30:00
Quote Anchor link
Dit is hem (getest):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    geboortedatum,
    CONCAT(YEAR(CURDATE()) , DATE_FORMAT(geboortedatum, '-%m-%d')) AS verjaardag_dit_jaar
FROM verjaardag
WHERE CONCAT(YEAR(CURDATE()) , DATE_FORMAT(geboortedatum, '-%m-%d'))
BETWEEN DATE_ADD(CURDATE() , INTERVAL 1 DAY) AND DATE_ADD(CURDATE() , INTERVAL 8 DAY)
 
Martijn Roverts

Martijn Roverts

27/10/2006 15:39:00
Quote Anchor link
@Jan
Top dat is hem, het lijkt zo logisch als je het ziet staan, maar kon er niet opkomen. Bedankt voor de hulp!!!
 
Jan Koehoorn

Jan Koehoorn

27/10/2006 15:53:00
Quote Anchor link
Okee, graag gedaan :-)
 
Koshi koshi

Koshi koshi

12/01/2015 22:42:54
Quote Anchor link
Ik zou deze code willen gebruiken om op mijn site de volgende wedstrijden aan te kondigen.
Mijn output is :

Volgende speeldag
2015-01-14-18:00:00-Elite-Wit - Groen
2015-01-14-18:30:00-U11-Geel - Rood
2015-01-16-18:00:00-U7-Geel - Oranje
2015-01-16-18:00:00-U21-Groen - Paars
2015-01-16-18:00:00-U11-Bruin - Wit
2015-01-16-19:30:00-U8-Zwart - Grijs
2015-01-16-22:00:00-Elite-Oranje - Geel


Nu zou ik het graag zo hebben dat het per kalenderdag gegroepeerd wordt, gesorteerd op uur en reeks.

D d F Y
uur (00:00)- Reeks - thuisploeg - Bezoekers
uur (00:00)- Reeks - thuisploeg - Bezoekers
uur (00:00)- Reeks - thuisploeg - Bezoekers
.....

D d F Y
uur (00:00)- Reeks - thuisploeg - Bezoekers
uur (00:00)- Reeks - thuisploeg - Bezoekers
.....

Kan iemand mij hiermee helpen?
Hoe kan ik de datum in het nederlands krijgen en het uur zonder de seconden.
Alvast bedankt voor de hulp.


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
<?php

// Create connection
$conn = new mysqli($host, $username, $password, $db);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$sql = "SELECT id, datum, uur, reeks, thuisploeg, bezoekers,   CONCAT( YEAR( CURDATE( ) ) , DATE_FORMAT( datum, '-%m-%d' ) )
FROM wedstrijden
WHERE CONCAT( YEAR( CURDATE( ) ) , DATE_FORMAT( datum, '-%m-%d' ) )
BETWEEN DATE_ADD( CURDATE( ) , INTERVAL 1
DAY )
AND DATE_ADD( CURDATE( ) , INTERVAL 8
DAY)
ORDER BY `datum` ASC, `uur` ASC, `reeks` DESC "
;

$result = $conn->query($sql);
echo "Volgende speeldag<br>";
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    
        echo "" . $row["datum"]. "-" . $row["uur"]."-" . $row["reeks"]."-" . $row["thuisploeg"]." - " . $row["bezoekers"]. "<br>";
    }
}
else {
    echo "0 results";
}

$conn->close();
?>
 
Ward van der Put
Moderator

Ward van der Put

13/01/2015 07:58:54
Quote Anchor link
Controleer of de datum wijzigt en, zo ja, toon dan een kopje. Bijvoorbeeld:

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
<?php
$result
= $conn->query($sql);
echo "Volgende speeldag<br>";
if ($result->num_rows > 0) {
    $date_heading = '';
    while($row = $result->fetch_assoc()) {
        if ($date_heading != $row['datum']) {
            echo '<h3>' . $row['datum'] . '</h3>';
            $date_heading = $row['datum'];
        }

        echo "" . $row["datum"]. "-" . $row["uur"]."-" . $row["reeks"]."-" . $row["thuisploeg"]." - " . $row["bezoekers"]. "<br>";
    }
}
else {
    echo "0 results";
}

?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/01/2015 19:30:14
Quote Anchor link
Koshi koshi op 12/01/2015 22:42:54:
Ik zou deze code willen gebruiken om op mijn site de volgende wedstrijden aan te kondigen.

Ik zie het verband niet tussen verjaardagen en een wedstrijdprogramma.
Ik denk dat je beter een nieuw topic kan starten.

Daarnaast is de hier geboden oplossing niet correct.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
WHERE CONCAT(YEAR(CURDATE()) , DATE_FORMAT(geboortedatum, '-%m-%d'))
BETWEEN DATE_ADD(CURDATE() , INTERVAL 1 DAY) AND DATE_ADD(CURDATE() , INTERVAL 8 DAY)

Dit zal van 24 t/m 31 december onjuiste resultaten opleveren, als bv op 30 december 2014 dit wordt uitgevoerd, krijgt iemand geboren op 1980-01-02 de datum 2014-01-02, hetgeen resulteert in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE '2014-01-02' BETWEEN '2014-12-31' AND '2015-01-06'


De oplossing is om een serie met datums te generen en dan de tabel te joinen op maand-dag:
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
SELECT
    u.first_name,
    u.last_name,
    d.ref_date,
    TIMESTAMPDIFF(YEAR, u.birth_date, d.ref_date) age
FROM
    (
    SELECT
        @ref_date := @ref_date + INTERVAL 1 DAY ref_date
    FROM
        (SELECT 1 x UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
         UNION SELECT 5 UNION SELECT 6 UNION SELECT 7) s
    CROSS JOIN
        (SELECT @ref_date := CURRENT_DATE) v
    ) d
JOIN
    users u
    ON DATE_FORMAT(d.ref_date, '%m-%d') = DATE_FORMAT(u.birth_date, '%m-%d')


Ik weet dat dit al een oud topic is, maar dit verjaart niet.
Gewijzigd op 20/01/2015 12:49:01 door Ger van Steenderen
 



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.