Avatar billede learner Praktikant
11. november 2005 - 16:27 Der er 27 kommentarer og
1 løsning

brug af SELECT AS i mysql

SELECT *, (TO_HOURS(DATE_ADD(dato_stamp, INTERVAL antal_timer HOUR))-TO_HOURS(NOW())) AS timeleft FROM tabel

Jeg vil sætte timeleft = (datostamp+antal_timer)-now() - så skulle jeg gerne få hvor mange timer der er tilbage.

datostamp sættes med now() når der oprettes en række, samt der indsættes antal_timer at rækken skal eksistere.
feks datostamp=now() og antal_timer=20

Hvad gør jeg forkert? Og hvad skal jeg gøre i stedet for?
Avatar billede learner Praktikant
11. november 2005 - 16:32 #1
jeg får denne 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 '(DATE_ADD(dato_stamp, INTERVAL antal_timer HOUR))-TO_HOUR(NOW())
Avatar billede nielle Nybegynder
11. november 2005 - 17:27 #2
Der er vist ikke noget som hedder TO_HOURS i MySQL:

http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Avatar billede nielle Nybegynder
11. november 2005 - 17:27 #3
Prøv at bruge DATEDIFF i stedet.
Avatar billede learner Praktikant
11. november 2005 - 17:29 #4
Nå, det er problemet :o)
Jeg bruger nemlig WHERE (TO_DAYS(NOW())-TO_DAYS(dato)) et andet sted og så troede jeg at der os var TO_HOURS
Avatar billede learner Praktikant
11. november 2005 - 17:45 #5
Ok, jeg har kigget lidt på det nu.

Skal jeg så ik skrive noget lign.:
SELECT *, DATEDIFF(DATE_ADD(dato_stamp, INTERVAL antal_timer HOUR),NOW()) AS timeleft FROM tabel
Avatar billede learner Praktikant
11. november 2005 - 17:48 #6
Man kan vel egentligt sige at:
jeg vil gerne have forskellen mellem DATE_ADD(datostamp, INTERVAL antal_timer HOUR) og NOW() målt i (hele)timer
Avatar billede nielle Nybegynder
11. november 2005 - 17:55 #7
Hmmm, du skal nok bruge TIMEDIFF i stedet for DATEDIFF. Og så HOUR uden om TIMEDIFF.
Avatar billede nielle Nybegynder
11. november 2005 - 17:56 #8
SELECT *, HOUR(TIMEDIFF(DATE_ADD(dato_stamp, INTERVAL antal_timer HOUR),NOW())) AS timeleft FROM tabel
Avatar billede learner Praktikant
11. november 2005 - 17:57 #9
HEH, jeg sad lige og legede med næsten dets samme :o) Tusind tak :o)
Avatar billede nielle Nybegynder
11. november 2005 - 17:58 #10
Det funker?
Avatar billede learner Praktikant
11. november 2005 - 18:01 #11
Nej desværre ik
jeg var ved at prøve noget lign.:
TIMEDIFF(HOUR, dato_stamp, NOW())+antal_timer
Avatar billede learner Praktikant
11. november 2005 - 18:03 #12
SELECT *, TIMEDIFF(HOUR, dato_stamp, NOW())+antal_timer AS timeleft
virker heller ik.
Avatar billede nielle Nybegynder
11. november 2005 - 18:12 #13
I den sidste står HOUR også lidt umutiveret midt i det hele.

Ang. dit udtryk:

... DATE_ADD(dato_stamp, INTERVAL antal_timer HOUR) ...

- hvor kommer "antal_timer" så fra? Bør der ikke stå et tal i stedet for et felt?
Avatar billede learner Praktikant
11. november 2005 - 18:26 #14
jo, antal_timer er et felt med et tal. desuden har jeg nu os prøvet med dette:
SELECT *, HOUR(TIMEDIFF(dato_stamp,NOW()))+antal_timer AS timeleft
men det virker desværre heller ik.

Fejl jeg får:
Check the manual that corresponds to your MySQL server version for the right syntax to use near '(dato_stamp,NOW()))+antal_timer AS timeleft FROM tabel W...

Kan sku ik forstå det.
Skulle det ik virke?
Avatar billede learner Praktikant
11. november 2005 - 18:30 #15
Jeg har lige prøvet at fjerne antal_dage fra den og den giver stadig fejl
Sådan her:
SELECT *, HOUR(TIMEDIFF(dato_stamp,NOW())) AS timeleft FROM online_offers

Nu prøver jeg den helt simple:
SELECT *, TIMEDIFF(dato_stamp,NOW()) AS timeleft FROM online_offers

og bagefter prøver jeg:
SELECT *, antal_timer AS timeleft FROM online_offers
Avatar billede learner Praktikant
11. november 2005 - 18:33 #16
'SELECT *, antal_timer AS timeleft FROM online_offers' virker :o)
Men så går man jo glip af beregningen :o(
ik så smart

Fatter det ik..
Avatar billede nielle Nybegynder
11. november 2005 - 18:34 #17
Er dit felt, dato_stamp, et date-felt eller et datetime-felt? TIMEDIFF kræver jo at det er et datetime-felt, og det giver vel egentligt heller ikke særlig meget mening at lægge eller trække timer fra en dato uden at kende tidspunktet på datoen.
Avatar billede learner Praktikant
11. november 2005 - 19:30 #18
det er sat til datetime
Avatar billede learner Praktikant
11. november 2005 - 19:30 #19
Måske er det nemmere at beregne det med PHP :o)
Avatar billede nielle Nybegynder
11. november 2005 - 19:33 #20
Måske, men jeg tror nu at det sagtens skulle kunne lade sig gøre i SQL.

Hvad gover:

SELECT TIMEDIFF(dato_stamp,NOW()) AS timeleft FROM online_offers

- og:

SELECT *, TIMEDIFF(dato_stamp,NOW()) AS timeleft FROM online_offers
Avatar billede learner Praktikant
11. november 2005 - 21:12 #21
SELECT *, TIMEDIFF(dato_stamp,NOW()) AS timeleft FROM online_offers
giver:
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 '(dato_stamp,NOW()) AS timeleft FROM online_offers

SELECT TIMEDIFF(dato_stamp,NOW()) AS timeleft FROM online_offers
giver samme:
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 '(dato_stamp,NOW()) AS timeleft FROM online_offers

Så om '*,' er med eller ej, gør ingen forskel :o)
Det er underligt!
Avatar billede learner Praktikant
12. november 2005 - 15:42 #22
Hvordan kan man lave det med PHP i stedet for?
Avatar billede nielle Nybegynder
12. november 2005 - 19:55 #23
Er det din egen server og database? For så vil jeg da anbefale en opdatering af din MySQL. TIMEDIFF() har været med siden version 4.1.1.

Prøv eventuelt lige denne her PHP-kode:

echo mysql_get_server_version();
Avatar billede learner Praktikant
12. november 2005 - 22:25 #24
Det er ikke min egen server og db.

Har prøvet - Får bare:
Fatal error: Call to undefined function: mysql_get_server_version()

Jeg er ret sikker på at det er version 4.1 for jeg kan bruge unicode / utf8
Avatar billede learner Praktikant
12. november 2005 - 22:59 #25
jubii, nu virker det vist :o)

sådan gør jeg:
SELECT *, hour(dato_stamp)-hour(now())+antal_timer as timeleft FROM tabel

Jeg er ikke sikker på om timeleft passer, men det kan jeg jo bare regne efter :o)
Avatar billede nielle Nybegynder
13. november 2005 - 09:38 #26
Jo, den burde da vist regne rigtigt. :^)

4.1.1 er jo desværre også nyere end 4.1. Der er også en anden kommando man kan skrive hvis man vil have versionen, men den kan jeg ikke lige huske.
Avatar billede learner Praktikant
13. november 2005 - 13:35 #27
Du skal have pointene alligevel, for du fik mig hjulpet frem til løsningen :o)

Smid et svar :o)
Avatar billede nielle Nybegynder
13. november 2005 - 18:04 #28
Ok så ...

... et svar :^)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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