Avatar billede baitianlong Nybegynder
26. november 2004 - 23:38 Der er 25 kommentarer og
1 løsning

Datediff i antal dage i mysql

Jeg har sådan en fin bog om SQL og der står ikke så meget om datediff i MySql...

Jeg skal vide hvor mange dag det er siden at det var den dato som står i et DATE felt.

Jeg bruger PHP og kan således lave dagen i dag i det rette format med:

date("Y-m-d");

I min database er der et felt med "oprettelsesdato" i samme format, som DATE datatype. Hvordan får jeg sql til at returnere antal dage imellem nu og "oprettelsesdato"?
Avatar billede arne_v Ekspert
26. november 2004 - 23:42 #1
SELECT DATEDIFF(felt,CURRDATE()) FROM tabel

måske
Avatar billede arne_v Ekspert
26. november 2004 - 23:42 #2
Avatar billede baitianlong Nybegynder
26. november 2004 - 23:53 #3
Kan du hjælpe mig med at putte det ind i min side?

$result = mysql_query("SELECT * FROM hund WHERE name='$dogname' AND yourname='$yourname'") or die(mysql_error());
if($row = mysql_fetch_assoc($result)) {
    print "yourname=".$row['yourname']."&name=".$row['name']."&age=".HER SKAL VI HAVE DEN DATEDIFF IND."&kg=".$row['kg']."&date=".$row['date']."&lastvisit=".$row['lastvisit']."&health=".$row['health']."&hungry=".$row['hungry']."&iq=".$row['iq']."&fun=".$row['fun']."&clean=".$row['clean']."&comfort=".$row['comfort']."&";
}

:)
Avatar billede baitianlong Nybegynder
26. november 2004 - 23:55 #4
date er navnet på feltet der indeholder den DATE hvor "hunden" blev oprettet. (men det har du nok gættet :)
Avatar billede arne_v Ekspert
26. november 2004 - 23:55 #5
Den skal slet ikke ind der men i SELECT !
Avatar billede arne_v Ekspert
26. november 2004 - 23:57 #6
$result = mysql_query("SELECT yourname,name,DATEDIFF(date,CURRDATE()) AS age,kg,date,lastvisit,health,hungry FROM hund WHERE name='$dogname' AND yourname='$yourname'") or die(mysql_error());
Avatar billede baitianlong Nybegynder
26. november 2004 - 23:57 #7
ja ja, det er jeg klar over, men skal jeg så lave to selects, eller...
Avatar billede arne_v Ekspert
26. november 2004 - 23:58 #8
og så kan age bruges som et felt
Avatar billede arne_v Ekspert
26. november 2004 - 23:58 #9
Måske skal det være

DATEDIFF(`date`,CURRDATE())

da DATE kunne tænkes at være reserveret
Avatar billede baitianlong Nybegynder
26. november 2004 - 23:58 #10
ok, det prøver jeg lige :)
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:04 #11
Den kan ikke lide det hverken med eller uden '', men det er jo også mig der er et fjols og kalde et felt for date. Jeg fikser det lige og tester igen :)
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:07 #12
Det var den ligeglad med. Der er stadig fejl:

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 '(oprdate,CURRDATE()) AS age,kg,date,lastvisit,health,hungry, iq

Her er scriptlinien:

$result = mysql_query("SELECT yourname,name,DATEDIFF(oprdate,CURRDATE()) AS age,kg,date,lastvisit,health,hungry, iq,fun,clean,comfort FROM hund WHERE name='$dogname' AND yourname='$yourname'") or die(mysql_error());
Avatar billede michael_stim Ekspert
27. november 2004 - 00:10 #13
Kun et R i CURDATE()
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:12 #14
Desværre stadig:

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 '(oprdate,CURDATE()) AS age,kg,date,lastvisit,health,hungry, iq,

Jeg blev ellers helt spændt :))
Avatar billede michael_stim Ekspert
27. november 2004 - 00:16 #15
Hmmm... Den ser god nok ud. Du bruger ikke en tidligere version af MySQL. DATEDIFF() kom med version 4.1.1
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:17 #16
Jeg har fundet på nettet at: DateDiff is only available in MySQL versions 4.1.1 and higher

Det er version 4.0.22 af MySql hos B-one, så der skal laves en alternativ løsning.
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:18 #17
Så skal vi lave det i PHP i stedet for... Skal jeg spørge i den kategori, eller er i nede med det også? :)
Avatar billede arne_v Ekspert
27. november 2004 - 00:19 #18
Prøv:

(TO_DAYS(CURRDATE()) - TO_DAYS(oprdate)) AS age
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:27 #19
Det ser ud til at være en vinder (omend kun med et r i CURDATE)... Hunden jeg tester på blev oprettet for et par timer siden og den siger 1 nu, så det er jo rigtigt :)

Hvis i begge smider et svar vil jeg acceptere og lukke spørgsmålet.

Og mange tak for hjælpen :)
Avatar billede arne_v Ekspert
27. november 2004 - 00:30 #20
ok
Avatar billede arne_v Ekspert
27. november 2004 - 00:30 #21
Hvad er det for nogle hunde der skal i databasen ?
Avatar billede michael_stim Ekspert
27. november 2004 - 00:31 #22
Det må vist väre Arnes. Jeg bidrog ikke med så meget her ;o)
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:36 #23
Det er nogle dumme hunde, jeg synes folk skal passe på internettet :))) (preview) - www.legende.dk/virtualdog/cyberdog.html
Avatar billede baitianlong Nybegynder
27. november 2004 - 00:37 #24
Men tak for det, og pas nu godt på jeres hunde... ;)
Avatar billede michael_stim Ekspert
27. november 2004 - 00:40 #25
Man SKULLE jo lige pröve. Men er bange for at den er dödsdömt :(
Avatar billede michael_stim Ekspert
27. november 2004 - 00:46 #26
Meget sjov idé, men kan der ikke komme nogle sjove lyde på når man laver de forskellige ting ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester