MySQL: Jarigen komende week
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
user,geboortedatum
FROM
users
WHERE
MONTH(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
AND
DAY(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
user,geboortedatum
FROM
users
WHERE
MONTH(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
AND
DAY(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
Ik probeer dus de jarigen van de komende week op te halen.
Groet
Gewijzigd op 01/01/1970 01:00:00 door K i p
MONTH(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
De jarige van de komende 7 MAANDEN wil hebben? of waT?
Haal dat hele MONTH gedoe is weg (en dus ook het AND statement =P )
Gewijzigd op 01/01/1970 01:00:00 door niek s
er staat interval 7day in de DATE_ADD
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
user,
geboortedatum
FROM
users
WHERE
geboortedatum
BETWEEN
NOW()
AND
INTERVAL 7 DAY +NOW()
user,
geboortedatum
FROM
users
WHERE
geboortedatum
BETWEEN
NOW()
AND
INTERVAL 7 DAY +NOW()
zoiets
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
SELECT user, geboortedatum FROM users WHERE geboortedatum BETWEEN NOW() AND NOW() +7 DAYS
Fout:
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 'DAYS' at line 11
ERRNO:
1064
zie mijn edit
Ik heb het nog eens gechecked en er staat echt een user in de db met geboortedatum 1990-10-23
sql al eens in phpmyadmin uitgevoerd
Nee Boris ik zou het zo niet weten
Bij dit soort queries moet je altijd heel erg opletten. Je wilt de jarigen van komende week. Stel dat het vandaag 29 december is? Je hebt dus niet genoeg aan het maandnummer en het dagnummer. Ik heb nu even geen zin om in deze te duiken, maar als voorbeeld geef ik je een query die de eerstvolgende zes jarigen geeft, er van uitgaande dat de geboortedatum als een type DATE is opgeslagen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Gegeven een tabel met geboortedatums, wie zijn de volgende
zes personen die jarig zijn?
<?php
$sql = "
SELECT datum,
CASE
WHEN MONTH(datum) < MONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(datum, '-%m-%d'))
WHEN MONTH(datum) > MONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE()), DATE_FORMAT(datum, '-%m-%d'))
WHEN MONTH(datum) = MONTH(CURDATE()) THEN
CASE
WHEN DAYOFMONTH(datum) < DAYOFMONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(datum, '-%m-%d'))
WHEN DAYOFMONTH(datum) >= DAYOFMONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE()), DATE_FORMAT(datum, '-%m-%d'))
END
END
AS volgende_verjaardag
FROM tabelnaam
ORDER BY volgende_verjaardag DESC
LIMIT 6
";
?>
zes personen die jarig zijn?
<?php
$sql = "
SELECT datum,
CASE
WHEN MONTH(datum) < MONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(datum, '-%m-%d'))
WHEN MONTH(datum) > MONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE()), DATE_FORMAT(datum, '-%m-%d'))
WHEN MONTH(datum) = MONTH(CURDATE()) THEN
CASE
WHEN DAYOFMONTH(datum) < DAYOFMONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(datum, '-%m-%d'))
WHEN DAYOFMONTH(datum) >= DAYOFMONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE()), DATE_FORMAT(datum, '-%m-%d'))
END
END
AS volgende_verjaardag
FROM tabelnaam
ORDER BY volgende_verjaardag DESC
LIMIT 6
";
?>
SQL-query: SELECT user, geboortedatum
FROM users
WHERE geboortedatum
BETWEEN NOW( )
AND INTERVAL 7
DAY + NOW( )
LIMIT 0 , 30
:( toch nog eventjes verder puzzelen :-P
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Nee dat weet ik Jan. En vandaar dat ik al eengaf dat ik het zo een 2 drie niet wist
Ik zie overigens (als ik mijn voorbeeld bekijk) dat de jarigen voor de komende week simpel zijn op te halen. Haal de LIMIT weg, en maak er een WHERE condition van die eist dat de datum tussen vandaag en 7 dagen verder ligt.
Code (php)
1
SELECT DATE_ADD(geboortedatum, INTERVAL (YEAR(CURDATE()) - YEAR(geboortedatum)) YEAR) AS geboortedatum FROM tabel;
?
Sorry van de naam, zal beter mijn best doen volgende keer.
Verder met je query krijg ik eruit rollen:
•De geboorte datum van elke user gesorteerd op het volgende resultaat dat ik ook krijg:
•Van elke user (LIMIT 6) de volgende verjaardag, gesorteerd als volgt: de laatste verjaardag eerst.
Dat is opzich ook wel tof :-D
En hoe kan ik nu kijken of de eerstvolgende geboortedatum binnen een week is?
•Eerst maak ik van order by desc => order by asc
•Dan met php:
Code (php)
Zoiets? Toch best ingewikkeld nog !!
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
user, geboortedatum
FROM
users
WHERE
DATE_ADD( geboortedatum, INTERVAL( YEAR( CURDATE( ) ) - YEAR( geboortedatum ) ) YEAR )
BETWEEN
NOW( )
AND
DATE_ADD( NOW( ) , INTERVAL 7 DAY ) ;
user, geboortedatum
FROM
users
WHERE
DATE_ADD( geboortedatum, INTERVAL( YEAR( CURDATE( ) ) - YEAR( geboortedatum ) ) YEAR )
BETWEEN
NOW( )
AND
DATE_ADD( NOW( ) , INTERVAL 7 DAY ) ;
Hoe laat je dat inspringen?? :-/
Edit:
Ik ben ook nooit tevreden he :-P
Gewijzigd op 01/01/1970 01:00:00 door K i p