---
title: "tacksam förhjälp med att förstå kod"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/136355-tacksam-förhjälp-med-att-förstå-kod"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "ptr_lks"
published: "2005-10-25T11:11:12.000Z"
updated: "2005-10-26T11:35:28.000Z"
replies: 7
views: 300
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/136355-tacksam-förhjälp-med-att-förstå-kod"
---

# tacksam förhjälp med att förstå kod

## #1 — ptr_lks, 2005-10-25T11:11Z

Hej,
hittade nedanstående kod

```
<%
  strDSN = "FILEDSN=cbwh_chat.dsn"

  Set cn = Server.CreateObject("ADODB.Connection")
  Set rs = Server.CreateObject("ADODB.Recordset")

  cn.Open strDSN

  strSQL = "SELECT * FROM Message WHERE " _
    & "DateDiff('N', Moment, Now) < 30 ORDER BY Moment DESC;"
  rs.Open strSQL, cn

  n = 0
  do while (not rs.EOF) and (n < 20)
    strUser = rs("FromUser")
    strMessage = ""

    if strUser <> "System" then
      strMessage = "<i>" & strUser & "</i>: "
    end if

    strMessage = strMessage & rs("Message") & " <small>(" _
      & FormatDateTime(rs("Moment"), 3) & ")</small>"

    if strUser = "System" then
      strMessage = "<font color=""777777""><b><i>" _
        & strMessage & "</i></b></font>"
    end if

    response.write strMessage & "<br>" &vbCRLF

    n = n + 1 
    rs.MoveNext
  loop 

  rs.Close
  cn.Close

  Set rs = Nothing
  Set cn = Nothing
%>
```

Lite förklarande text hittade jag också

> This means that we will display only messages written in the last T minutes, but not more than M messages. Personally, I consider that a combination like displaying the last 20 messages written in the last 30 minutes could be a right choice in many cases.

litet n i 

```
(n < 20)
n = n + 1
```

torde betyda antalet mess som jag vill visa
Men vad betyder stort N i

```
DateDiff('N', Moment, Now)
```

Permalänk: https://www.webforum.nu/p/136355

## #2 — Engine^, 2005-10-25T11:14Z

Litet n i T-SQL-funktionen datediff betyder att differansen ska visas i minuter.

Permalänk: https://www.webforum.nu/p/1694733

## #3 — K@llen, 2005-10-25T11:46Z

```
(n < 20)
n = n + 1
```

Ja det är ett villkor för hur många varv loopen har gått. Skulle varit effektivare att selektrera antalet direkt i SQL-frågan. "n" i detta fallet är ett variabelnamn på en kontrollvariabel. Normalt brukar man i första hand använda "i" som variabelnamn för kontrollvariabler i loopar.

Permalänk: https://www.webforum.nu/p/1694747

## #4 — ptr_lks, 2005-10-25T11:58Z

> **K@llen skrev:**
>
> Skulle varit effektivare att selektrera antalet direkt i SQL-frågan. "n" i detta fallet är ett variabelnamn på en kontrollvariabel. Normalt brukar man i första hand använda "i" som variabelnamn för kontrollvariabler i loopar.

hur skulle ditt förslag se ut?

Permalänk: https://www.webforum.nu/p/1694750

## #5 — K@llen, 2005-10-25T12:02Z

Jag skulle använt TOP 20 (Access) och LIMIT 20 (MySQL) för att bara hämta de senaste 20 posterna. Onödigt att hämta en massa data som inte ska användas.

Permalänk: https://www.webforum.nu/p/1694754

## #6 — ptr_lks, 2005-10-25T12:29Z

> **K@llen skrev:**
>
> Jag skulle använt TOP 20 (Access) och LIMIT 20 (MySQL) för att bara hämta de senaste 20 posterna. Onödigt att hämta en massa data som inte ska användas.

Är inte bekant med 

> TOP 20

, skall googla efter information...

Permalänk: https://www.webforum.nu/p/1694759

## #7 — doggelito, 2005-10-25T18:07Z

> **www.devguru.com skrev:**
>
> The TOP predicate returns the specified number of records from the top of the specified table. The following example returns the first 3 records:
>  
> SELECT TOP 3 MusicianName AS Musician, Instrument
> FROM Musicians;

<http://www.devguru.com/Technologies/jetsql/quickref/select.html>

Permalänk: https://www.webforum.nu/p/1694954

## #8 — Engine^, 2005-10-26T11:35Z

För att få något vettigt med TOP behövs även en ORDER BY, så att det sorteras efter rätt kolumn. Sorteringen sker på första kolumnen default.

Så uttrycket skulle väldå bli

```
SELECT TOP 20 *
FROM Message
WHERE datediff( 'n', Moment, now ) < 30
ORDER BY Moment DESC
```

Och med den varianten blir användandet av *n* i resten av koden överflödigt (om *n* används till något ytterligare).

Permalänk: https://www.webforum.nu/p/1695289

---

Tråden på webben: https://www.webforum.nu/amne/asp/136355-tacksam-förhjälp-med-att-förstå-kod
