webForumDet fria alternativet

Visa dagens födelsedagar?

13 svar · 903 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 271 inlägg
#1

Hur löser jag det enklast om jag vill visa dagens födelsedagar, samt kommande födelsedagar, (de närmaste 3 dagarna)?
Datumet är sparat som DATE (XXXX-MM-DD).

Tacksam för all hjälp.

StefanBergfeldtMedlem sedan sep. 2004828 inlägg
#2

WHERE födelsedag BETWEEN Date(Now()) AND DateAdd('d', 3, Date(Now())

Skulle jag tro. Om det är T-SQL. Är det MySQL är det Current_Timestamp() istället för Now()

GuldstrandMedlem sedan juli 20041 271 inlägg
#3

StefanBergfeldt skrev:

Om det är T-SQL. Är det MySQL är det Current_Timestamp() istället för Now()

Det är MySQL.

Då blir det alltså:

WHERE födelsedag BETWEEN Date(Current_Timestamp()) AND DateAdd('d', 3, Date(Current_Timestamp())

Har jag förstått rätt?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#4

Guldstrand skrev:

Det är MySQL.

Då blir det alltså:

WHERE födelsedag BETWEEN Date(Current_Timestamp()) AND DateAdd('d', 3, Date(Current_Timestamp())

Har jag förstått rätt?

Har du testat?

GuldstrandMedlem sedan juli 20041 271 inlägg
#5

MickeA.com skrev:

Har du testat?

Ja, fick följande:

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 '' at line 1

Testade med detta:

$res = mysql_query("SELECT namn, fodd FROM personer WHERE fodd BETWEEN Date(Current_Timestamp()) AND DateAdd('d', 3, Date(Current_Timestamp())")
metalboyMedlem sedan jan. 2005953 inlägg
#6

DateAdd finns inte i MySQL, däremot finns DATE_ADD.

Testa med

... BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)

(NOW() finns i MySQL)

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add

MickeA.comMedlem sedan feb. 20034 441 inlägg
#7

Testa det här istället:

$res = mysql_query("SELECT namn, fodd FROM personer WHERE fodd BETWEEN Date(CURRENT_TIMESTAMP()) AND DateAdd('d', 3, Date(CURRENT_TIMESTAMP())")[B];[/B]
MickeA.comMedlem sedan feb. 20034 441 inlägg
#8

Precis, det också! Dessutom saknade du ";" i slutet på raden, men det ger ju ett PHP fel och har inget med MySQL att göra.

GuldstrandMedlem sedan juli 20041 271 inlägg
#9

metalboy skrev:

DateAdd finns inte i MySQL, däremot finns DATE_ADD.

Testa med

... BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)

(NOW() finns i MySQL)

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add

Hmm! Inget hämtas från databasen.

Har detta:

	$res = mysql_query("SELECT namn, fodd FROM personer WHERE fodd BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)") or die(mysql_error());
	while ($arr = mysql_fetch_assoc($res))
{ 
	print("$arr[namn]<br />"); 
}
StefanBergfeldtMedlem sedan sep. 2004828 inlägg
#10

Ah, just ja, så var det...

MickeA.comMedlem sedan feb. 20034 441 inlägg
#11

För att utesluta vissa saker, kör frågan _direkt_ i phpMyAdmin:

SELECT namn, fodd FROM personer WHERE fodd BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)
metalboyMedlem sedan jan. 2005953 inlägg
#12

Guldstrand skrev:

Hmm! Inget hämtas från databasen.

Har detta:

	$res = mysql_query("SELECT namn, fodd FROM personer WHERE fodd BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)") or die(mysql_error());
	while ($arr = mysql_fetch_assoc($res))
{ 
	print("$arr[namn]<br />"); 
}

Du måste nog ta bort årtalet från datumen som ska jämföras, annars blir det lite fel.

... WHERE DATE_FORMAT(fodd, '%m-%d') BETWEEN DATE_FORMAT(NOW(), '%m-%d') AND DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 DAY), '%m-%d')
GuldstrandMedlem sedan juli 20041 271 inlägg
#13

MickeA.com skrev:

För att utesluta vissa saker, kör frågan _direkt_ i phpMyAdmin:

SELECT namn, fodd FROM personer WHERE fodd BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)

Hahaha! Jo jag förstod att det inte fanns några resultat från mysql.
Testade dock att ändra intervallet, men det hjälpte inte heller.
Finns ca 5 personer som jag VET fyller år i mitten på oktober t.e.x.

Vad exakt gör koden?

SELECT namn, fodd FROM personer WHERE fodd BETWEEN DATE(NOW()) AND DATE_ADD(DATE(NOW()), INTERVAL 3 DAY)
GuldstrandMedlem sedan juli 20041 271 inlägg
#14

metalboy skrev:

Du måste nog ta bort årtalet från datumen som ska jämföras, annars blir det lite fel.

... WHERE DATE_FORMAT(fodd, '%m-%d') BETWEEN DATE_FORMAT(NOW(), '%m-%d') AND DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 DAY), '%m-%d')

Aha! Nu fungerade det genast bättre. ;)
Tack!

253 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
132 ms — hämta forumlista (db)
119 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)