Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
-- Find alle rækker i tabel, hvor oprettetdato + 2 dage er -- større end den aktuelle dato (og tidspunkt) SELECT * FROM tabel WHERE DATEADD(day, 2, oprettetdato) > getdate()
Samme metode kan bruges i Access, blot med en lidt anden syntaks:
SELECT * FROM tabel WHERE DATEADD("d", 2, oprettetdato) > now()
jeg har et søgefelt, når jeg har søgt bliver det gemt, de sidste to dages søgeord bliver så vist, men ud for dem vil jeg gerne kunne se hvor mange hits der er på netop det søgeord
nej det er mig der vrøvler, den skal tjekker hvor mange gange det ord der er lagret i søgningerne går igen i en anden tabel...så er det ikke loop i loop, og i så fald hvordan
Det kunne måske klares ved at lave en join mellem søgeordstabellen og den relaterede tabel (hvor søgeordet skal findes):
SELECT s.sogetekst, COUNT(*) AS antal FROM soegninger AS s, anden_tabel t WHERE DATEADD('d', 2, t.oprettetdato) > now() AND t.tekst LIKE '%' + s.soegetekst + '%' GROUP by s.soegetekst
"Anden_tabel" er så den tabel der skal optælles og det forventes at den har en kolonne som hedder "oprettetdato" (da jeg forventer at det så er rækker i anden_tabel der ikke må være ældre end 2 dage). Desuden forventer jeg at kolonnen der skal søges i, i "anden_tabel" hedder "tekst".
Det er utestet, så der gives på ingen måder nogen garanti for at det fungerer, men indtil videre vil jeg mene det fungerer :-)
Hvis der rent faktisk skal tælles hvormange gange et ord optræder i et eller flere felter i en anden tabel, så har du nok ret i at der skal en løkke (eller to) til, for det tror jeg ikke umiddelbart man kan direkte i SQL-sætningen... men du kan i det mindste begrænse udtrækket til kun at returnere de rækker, hvor ordet forekommer mindst én gang, hvilket i de fleste tilfælde burde være bedre end det fulde resultat...
Det kunne være noget med:
SELECT s.sogetekst, t.* FROM soegninger AS s, anden_tabel t WHERE DATEADD('d', 2, t.oprettetdato) > now() AND ( t.kolonne1 LIKE '%' + s.soegetekst + '%' OR t.kolonne2 LIKE '%' + s.soegetekst + '%' OR t.kolonne3 LIKE '%' + s.soegetekst + '%' ) ORDER BY s.soegetekst
Der sorteres efter søgeordet, så du kan gennemløb rækkerne i resultatet og samle op på antallet af forekomster af hvert søgeord, uden at skulle lave de store armbevægelser i forhold til identificering af "søgeordstælleren"...
Det er dog stadig ikke en helt triviel opgave at lave optællingen, da du skal holde styr på hvilket søgeord du er igang med at tælle, undersøge antallet af forkomster i hver af de tre kolonner der skal undersøges og naturligvis iterere igennem alle rækkerne i resultatet.
Jeg er ked af at jeg ikke har fået svaret, men jeg har været noget ophængt med andre projekter, så dit spørgsmål har lige fået lavere prioritet...
Det jeg mener er at du med min SQL får et udtræk, hvor alle data skulle være med, så det drejer sig blot om at gennemløbe resultatet i en løkke og så ellers holde styr på hvilke søgeord det skal tælles op for. Det er her jeg foreslår at du laver en liste hvor hvert søgeord har en plads og hvor du for hver række i dit udtræk optæller det antal gange et søgeord findes i rækkens felter. Du vil så efter resultatet er gennemløbet, kunne aflæse antallet af gange et søgeord findes i listen. Du kunne bruge et Dictionary-objekt hvor søgeordet er nøglen og værdien er antallet af gange det findes.
Noget i stil med dette:
[b]function taelAntalForekomster(soegKilde, soegEfter) dim antal antal = 0 ' TODO: lav noget kode der kan tælle hvormange ' gange soegEfter forekommer i soegKilde taelAntalForekomster = antal end function
' Opret en liste til optælling af forekomster af hver søgetekst set liste = Server.CreateObject("Scripting.Dictionary")
' TODO: Opsæt den sql der skal fremsøge data set rs = conn.Execute(sql) do while not rs.eof soegetekst = rs("soegetekst") ' hvis søgeteksten ikke er blevet optalt tidligere, ' så skal der oprettes en plads i listen til optællinger ' på denne søgetekst... if not liste.Exists(soegetekst) then call liste.Add(soegetekst,0) end if liste.item(soegetekst) = liste.item(soegetekst) _ + taelAntalForekomster(rs("kolonne1"),soegetekst) liste.item(soegetekst) = liste.item(soegetekst) _ + taelAntalForekomster(rs("kolonne2"),soegetekst) liste.item(soegetekst) = liste.item(soegetekst) _ + taelAntalForekomster(rs("kolonne3"),soegetekst) rs.movenext loop rs.close set rs = nothing
' Udskriv antallet af gange hvert søgeord er fundet for each k in liste.keys Response.Write k & " => " & liste.item(k) & "<br>" next[/b}
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.