19. september 2003 - 12:49Der er
36 kommentarer og 2 løsninger
'Levetid' på annonce. (ASP/SQL)
Hej Jeg er igang med at lave sådan et annonce system, og ska lige bruge lidt hjælp. Okey, jeg vil gerne ha sådan at man kan vælge hvor lang tid ens annonce skal være 'aktiv' fra den dag man opretter´. 7, 15 eller 30 dage.
Lige nu bruger jeg en If sætning i min While løkke: If DateDiff("d", objRS("date"), date) <= objRS("auktion_life") Then
Men det holder jo ikke, fordi hvis jeg definere i SQL-strengen at jeg gerne vil ha fx. 10 poster vist. Så kører min while løkke igennem 10 gange, og hvis der så er en post der er for gammel så springer while løkken bare den post over. Dvs. at der så i dét tilfælde kun ville blive vist 9 poster :)
Jeg har prøvet at gøre det i SQL streng på følgende måde: .. WHERE " & DateDiff("d", objRS("date"), date) & " <= auk_data.auktion_life ..
Men det virker ikke, får følgende fejl: ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/auktion/pages/show.asp, line 7
Har en mistanke om at det er fordi jeg prøver at hente objRS("date") 'inde i' selve SQL strengen..
Du skal lave en SQL som kun henter de ting som skal vise, s¨å du ikke behøver en if sætning inde i din while loop. Ja det er bevidt da den ene er med DateDiff og den anden med DATE_ADD:
Så din kode bliver til:
SQL = "SELECT * FROM tabel WHERE DATE_ADD(date, INTERVAL auktion_life DAY) >= CURDATE()" set objRS = Conn.Execute(SQL)
do while not objRS.EOF 'kode som udksriver annonce
forklaring: DATE_ADD(date, INTERVAL auktion_life DAY) Den ligger antallet af dage som annoncen skal vise til den dato annoncen er oprette og tjekke hvis den dato er >= idag så vises annoncen, den udregner faktsik slut datoen for annoncen skal vises.
Tror du har lavet noget forkert. Her er hvad den burde/skal gøre: Den skal finde ud af foreskellen i dage imellem objRS("date") og datoen for idag. Derefter skal den så sige "Hvis foreskellen imellem de to datoer er lig med eller mindre end objRS("auktion_life") så skal dén post med."
Det er jo nøjaktig det samme bare udregnet på en anden måde... Den finder slut datoen for hvornår annoncen skal vise og tjekke om den er nyere end dags dato og hvis den er det medtages kolonne, du skal glemme det med objRS("date") og - dags dato for når du laver den første SQL er der ikke noget recordset mend datoer i.
SQL = SELECT * FROM tabel" set objrs = conn.execute(SQL) do while not objrs.EOF If DateDiff("d", objRS("date"), date) <= objRS("auktion_life") Then vis den end if
objRs.Movenext loop
og det skal laves om som vist 19/09-2003 13:11:08 du lader mySQL udregne og bestemme hvilke der skal vises i stedet for at hendte alt og så bruge if sætningnen til at bestemme en post udskrives eller ej.
ja det forstår jeg godt, og jeg har indsat det SQL du har givet mig.. det virker åbenbart bare ik :)
Tror måske den MySQL server jeg kører på har forkert dato, fordi når jeg sætter auktion_life til 7 så "forsvinder" posten først når jeg har sat oprettelses datoen til 03-09/03 .. Mærkeligt..
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.