Avatar billede axkris Nybegynder
23. januar 2004 - 14:16 Der er 26 kommentarer og
3 løsninger

Funktion i sql-kode

Hej

Jeg har et annoncesystem, hvor der skal vises den annonce, som har haft mindst visninger sammenholdt med, hvor langt tid siden det er, at den er blevet oprettet.

Problemet er, at jeg skal bruge værdien fra kollonen "Oprettelse" inde i en funktion, som ligger i sql-forespørgslen. Selvfølgelig kunne man dele den op i to forespørgsler, men det ønsker jeg helst ikke.

Se problemet ved ***:

strQuery="SELECT DISTINCT * FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", ***Oprettelse***), Date())
Avatar billede mugs Novice
23. januar 2004 - 14:26 #1
Korrekt syntaks for DateDiff er således:

DateDiff("d";[Dato1];Date())
Avatar billede axkris Nybegynder
23. januar 2004 - 14:52 #2
DateDiff - funker fint og der er heller ikke det, som jeg spørger om hjælp til :-D

Det er derimod syntaksen for, hvordan man indsætter værdien "Oprettelse" i select-sætningen.

strQuery="SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", OPRETTELSE, Date())

Lige nu står "OPRETTELSE", som om den er en variabel (hvilket den jo ikke er), men jeg ved ikke hvordan jeg skal indsætte de nødvendige aprostroffer og/eller plinger omkring "OPRETTELSE", så sql-maskinen opfatter "OPRETTELSE", som en kollone-værdi - ligesom ID og VISNINGER er.
Avatar billede mugs Novice
23. januar 2004 - 15:00 #3
Prøv:
DateDiff("d";[Oprettelse];Date())
Avatar billede axkris Nybegynder
23. januar 2004 - 15:10 #4
strQuery="SELECT DISTINCT * FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d"; [OPRETTELSE]; Date())

Microsoft VBScript compilation (0x800A03EE)
Expected ')'
Avatar billede terry Ekspert
23. januar 2004 - 18:07 #5
VBScript !
THis is from ASP!

Where is OPRETTELSE, is it a field in the dB or a field on an ASP Page?

If it is in the dB then I suggest that you create a query in the database its easier to get the correct syntax. Then your SQL will look like this

strQuery="SELECT * FROM YourQuery"
Avatar billede terry Ekspert
23. januar 2004 - 18:08 #6
I can also make the query for you if you sedn the dB to

NOSPAMeksperten@santhell.dkNOSPAM

remove NOSPAM!
Avatar billede terry Ekspert
23. januar 2004 - 18:08 #7
sedn = send
Avatar billede axkris Nybegynder
23. januar 2004 - 18:12 #8
Hi terry... I was waiting for you :-D

It's a db-field (from the same table as "SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER").
Avatar billede axkris Nybegynder
23. januar 2004 - 18:14 #9
There is only one table and that's PLUSPROFIL_BANNER
Avatar billede terry Ekspert
23. januar 2004 - 18:16 #10
23/01-2004 18:08:37
Avatar billede axkris Nybegynder
23. januar 2004 - 18:16 #11
Like:

strQuery="SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", get_value_of_OPRETTELSE_from_the_same_table_somehow, Date())
Avatar billede terry Ekspert
23. januar 2004 - 18:17 #12
I'm not so active during working hours (have work to do :o) )
Avatar billede axkris Nybegynder
23. januar 2004 - 18:19 #13
I can't send the db because it is mysql-database (but the sql-syntax should be the same and therefore I posted it i the access-forum)
Avatar billede terry Ekspert
23. januar 2004 - 18:24 #14
You have a problem I think then!

I very much doubt that MySQL understands DateDiff so you cant send it IN the SQL. And because you dont have the value of the field (OPRETTELSE) then you cant calculate the difference. You will need to make your select and then in code calculate the difference
Avatar billede axkris Nybegynder
23. januar 2004 - 18:28 #15
Okay, but I hoped that I did not have to put it in 2 requests... as I wrote in the beginning.
Avatar billede axkris Nybegynder
23. januar 2004 - 18:31 #16
But DateDiff does work in mysql as in access:

This is working:
strQuery="SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", "01-01-2001", Date())
Avatar billede terry Ekspert
23. januar 2004 - 18:32 #17
Isnt it possible to make a query in MySQL?
Avatar billede axkris Nybegynder
23. januar 2004 - 18:35 #18
Yes and the sql-syntax is nearly the same.
Avatar billede terry Ekspert
23. januar 2004 - 18:50 #19
You say

This is working:
strQuery="SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", "01-01-2001", Date())

But this IS NOT in MySQL!
If you look at the contents of strQuery I am sure you will see that this part

DateDiff("d", "01-01-2001", Date())

has been converted to a number
Avatar billede axkris Nybegynder
23. januar 2004 - 18:55 #20
Yes

This:
SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", "01-01-2004", Date())

Returns:
SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / 23

And it is working.
Avatar billede axkris Nybegynder
23. januar 2004 - 18:56 #21
But it should be something like:

strQuery="SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / " & DateDiff("d", get_value_of_OPRETTELSE_from_the_same_table_somehow, Date())
Avatar billede terry Ekspert
23. januar 2004 - 19:06 #22
So as I said earlier Datediff is NOT getting sent to the database it is getting transaled to a number BEFORE it gets sent! This means that you DO NOT have the value of OPRETTELSE to use in Datadiff.
So as far as I see it you have two options!
1: Find out IF there is a function in MySQL (NOT vbScript) which can do the same as DateDiff.
2: Select the fields you want and then in code (using Datediff) calculate the difference.

But I have a feeling you may getting a better answer under ASP, as I cant help you with that!
Avatar billede terry Ekspert
23. januar 2004 - 19:06 #23
Anyway, I'm off for something to eat now!
Avatar billede erikjacobsen Ekspert
23. januar 2004 - 19:18 #24
I mysql (men hvorfor dog stille spørgsmålet i access når det er til mysql.....?) kan du

strQuery="SELECT DISTINCT ID, VISNINGER, OPRETTELSE FROM PLUSPROFIL_BANNER ORDER BY VISNINGER / ( to_days(now()) - to_days(DITDATOFELT))
Avatar billede erikjacobsen Ekspert
23. januar 2004 - 19:19 #25
Ups - du kan komme til at dividere med 0. Læg fx bare een til nævneren ;)
Avatar billede axkris Nybegynder
25. januar 2004 - 12:47 #26
Hej Erikjacobsen

Mange tak for løsningen, det hjalp. Tryk svar.

Og jeg beklager, at jeg har lagt spørgsmålet i access-kategorien, men der var igennem lang tid ingen hjælp at hente i mysql-kateogien, og så troede jeg, at jeg kunne smide den her, fordi der kun var tale om sql-kode, som lige så godt kunne være til en access-db.
Avatar billede terry Ekspert
25. januar 2004 - 12:58 #27
whats importand is that you got an answer in the end :o)
Avatar billede erikjacobsen Ekspert
25. januar 2004 - 13:24 #28
Tak, jeg samler ikke på point. Men der er så meget forskel på sql-dialekterne, at
man er nødt til at fortælle hvilken man bruger ;)
Avatar billede axkris Nybegynder
25. januar 2004 - 13:27 #29
Ok, men så tager jeg selv de points, som du skulle have haft :-D
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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