/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
SQL-kode der undersøger om der er nye tråd~
Fra : Jakob Munck


Dato : 23-02-02 09:05

Jeg har en trådet debat på www.ansgar.dk og på forsiden vises de
5 nyeste tråde, og nu forsøger jeg at lave det sådan, at man ud
for hver af disse tråde får vist et billede ("nye indlæg"), når
der er nye indlæg i en af disse tråde. Men det er ikke helt let.

SQL til vise de 5 nyeste tråde ser sådan ud:

Set RS = Conn.Execute( "SELECT TOP 5 * FROM forum WHERE
InStr(Indice, '.') = 0 ORDER BY ID DESC" )

Nu er spørgsmålet så, hvordan jeg skriver kode, der - for hver af
de 5 tråde der vises - undersøger om der i tabellen "forum" er en
record med det samme trådnummer ("traadNummer"), der har en dato
("dato") mindre end 7 dage forskellig fra d.d.

Koden for tidsforskel (målt i timer) er jo denne:
DateDiff("h", Rs("dato"), Dato) < 168

Men hvordan kombineres det med listningen af de 5 sidste tråde?

Jeg håber det er forståeligt. Problemet er at lave kode, der gør
at der ved listningen af de 5 nyeste tråde, ud for hver af disse
undersøges om der er en anden record med det samme "traadNummer"
og en "dato" der er mindre end
168 timer (1 uge) fra d.d.

Er der nogen, der kan give en hjælpende hånd?

v.h.
Jakob Munck

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Anders Truels Nielse~ (23-02-2002)
Kommentar
Fra : Anders Truels Nielse~


Dato : 23-02-02 14:48

Jeps. Hvis du bruger SQL Server kan du i hvert fald bruge GETDATE()-7 som er
datoen for 7 dage siden. Dvs. at din query bliver noget i denne retning:

SELECT TOP 5 f1.*,
(SELECT COUNT f2.traadNummer
FROM Forum f2
WHERE f2.traadNummer = f1.traadNummer
AND f2.beskedDato > GETDATE()-7) AS
NyeBeskeder

FROM Forum f1

WHERE InStr(Indice, '.') = 0

ORDER BY ID DESC

Jeg har ikke testet det så der er sikkert nogle småfejl.

Hver af de fem returnerede records vil have et felt der hedder NyeBesker.
Hvis det er 0 er der ingen nye beskeder. Hvis det ikke er 0 er der nye
beskeder i den pågældende tråd og du kan indsætte et flot lille billede hvor
der står "Der er fest i denne tråd!".

Anders


"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:a57ig9$ogd$1@sunsite.dk...
> Jeg har en trådet debat på www.ansgar.dk og på forsiden vises de
> 5 nyeste tråde, og nu forsøger jeg at lave det sådan, at man ud
> for hver af disse tråde får vist et billede ("nye indlæg"), når
> der er nye indlæg i en af disse tråde. Men det er ikke helt let.
>
> SQL til vise de 5 nyeste tråde ser sådan ud:
>
> Set RS = Conn.Execute( "SELECT TOP 5 * FROM forum WHERE
> InStr(Indice, '.') = 0 ORDER BY ID DESC" )
>
> Nu er spørgsmålet så, hvordan jeg skriver kode, der - for hver af
> de 5 tråde der vises - undersøger om der i tabellen "forum" er en
> record med det samme trådnummer ("traadNummer"), der har en dato
> ("dato") mindre end 7 dage forskellig fra d.d.
>
> Koden for tidsforskel (målt i timer) er jo denne:
> DateDiff("h", Rs("dato"), Dato) < 168
>
> Men hvordan kombineres det med listningen af de 5 sidste tråde?
>
> Jeg håber det er forståeligt. Problemet er at lave kode, der gør
> at der ved listningen af de 5 nyeste tråde, ud for hver af disse
> undersøges om der er en anden record med det samme "traadNummer"
> og en "dato" der er mindre end
> 168 timer (1 uge) fra d.d.
>
> Er der nogen, der kan give en hjælpende hånd?
>
> v.h.
> Jakob Munck
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials



Jakob Munck (23-02-2002)
Kommentar
Fra : Jakob Munck


Dato : 23-02-02 17:10

Hej Anders, tak for hjælpen.

Jeg bruger Access-db og jeg har forsøgt at tilpasse din SQL-sætning til
dette, men den virker ikke. Jeg får at vide, at der er en "syntaksfejl".
Sådan ser sætningen ud nu:

SQL = "SELECT TOP 5 f1.*,(SELECT COUNT f2.traadNummer FROM Forum WHERE
f2.traadNummer = f1.traadNummer AND DateDiff('h', f2.Dato, Dato) < 168 AS
NyeBeskeder) FROM Forum f1 WHERE InStr(Indice, '.') = 0 ORDER BY ID DESC"

set rs = Conn.Execute(SQL)

Det er rimelig kompliceret SQL, og fejlmeldingen bliver man ikke meget
klogere af. Der skal altså ændres en eller flere ting, men hvad?

v.h.
Jakob Munck



Anders Truels Nielse~ (23-02-2002)
Kommentar
Fra : Anders Truels Nielse~


Dato : 23-02-02 18:43

> SQL = "SELECT TOP 5 f1.*,(SELECT COUNT f2.traadNummer FROM Forum WHERE
> f2.traadNummer = f1.traadNummer AND DateDiff('h', f2.Dato, Dato) < 168 AS
> NyeBeskeder) FROM Forum f1 WHERE InStr(Indice, '.') = 0 ORDER BY ID DESC"

Jeg kan se to fejl:

1) Inde i parentesen skal tabellen Forum navngives f2, dvs der skal stå
Forum f2

2) "AS NyeBeskeder" skal ikke stå inde i parentesen. Det er indholdet af
parentesen der navngives "NyeBeskeder". Dvs parentes slut skal rykkes
tilbage til lige efter 168

Anders



Jakob Munck (23-02-2002)
Kommentar
Fra : Jakob Munck


Dato : 23-02-02 21:52

Jeg har ændret variablen "traadNummer" til dens rigtige navn "Traad" og
forenklet datotjekket til "f2.Dato > Now - 7", hvilket skulle virke i
Access. Nu ser koden sådan ud:

SQL = "SELECT TOP 5 f1.*,(SELECT COUNT f2.Traad FROM Forum f2 WHERE f2.Traad
= f1.Traad AND f2.Dato > Now - 7) AS NyeBeskeder FROM Forum f1 WHERE
InStr(Indice, '.') = 0 ORDER BY ID DESC"

Og fejlmeldingen sådan:

Der er en syntaksfejl i forespørgselsudtrykket "(SELECT COUNT f2.Traad FROM
Forum f2 WHERE f2.Traad = f1.Traad AND f2.Dato > Now - 7)".


v.h.

Jakob Munck




Jakob Munck (24-02-2002)
Kommentar
Fra : Jakob Munck


Dato : 24-02-02 08:56

Jeg har fundet en løsning på problemet, hvor denne SQL (som jeg tror bliver
svær at få til at virke) ikke er nødvendig. Jeg siger tak for hjælpen, som
jeg har lært af og vil bruge i anden sammenhæng.

v.h.
Jakob Munck



Stig Johansen (24-02-2002)
Kommentar
Fra : Stig Johansen


Dato : 24-02-02 09:35


"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:3c77ffc4$0$10811$edfadb0f@dspool01.news.tele.dk...
> Jeg har ændret variablen "traadNummer" til dens rigtige navn "Traad" og
> forenklet datotjekket til "f2.Dato > Now - 7", hvilket skulle virke i
> Access. Nu ser koden sådan ud:
>
> SQL = "SELECT TOP 5 f1.*,(SELECT COUNT f2.Traad FROM Forum f2 WHERE
f2.Traad
> = f1.Traad AND f2.Dato > Now - 7) AS NyeBeskeder FROM Forum f1 WHERE
> InStr(Indice, '.') = 0 ORDER BY ID DESC"
>
> Og fejlmeldingen sådan:
>
> Der er en syntaksfejl i forespørgselsudtrykket "(SELECT COUNT f2.Traad
FROM
> Forum f2 WHERE f2.Traad = f1.Traad AND f2.Dato > Now - 7)".


Prøv med .. COUNT (f2.Traad) ..

--

Med venlig hilsen/Best regards
Stig Johansen
Stig.Johansen@udvikling.it.dk
(remove .dk)






Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste