Avatar billede grafikeren Nybegynder
23. december 2003 - 13:01 Der er 11 kommentarer og
1 løsning

Placering efter point

Hej

Vi har en database med en masse produkter, og disse produkter bliver anmeldt og modtager et antal point. Under hver produktside, skal der stå placeringen på denne cd i forhold til hvor mange point den pågældende cd er tildelt.

Det kan sammenlignes med placeringen her på Eksperten. Under menuen "Dine data" står der også placeringen.

Hvordan laver jeg dette i asp?
Avatar billede zkiifreak Nybegynder
23. december 2003 - 13:12 #1
det er noget med at skrive flg, når du kalder din database:
    call InData.Open("SELECT * FROM [din_database] ORDER BY [point] DESC", Conn)
Når du så skriver ud er det noget ala:
tmp = 1
while not InData.EOF
      Response.Write(InData("CD") & " har placering nr.: " & tmp)
      tmp = tmp+1
Wend
Dine records er nemlig sorteret faldende, så dem med flest point skrives først ud. Skal de sorteres stigende skal du erstatte DESC med ASC.

Zkii
Avatar billede deeflate Nybegynder
23. december 2003 - 13:16 #2
Men så skal man jo skrive dem allesammen ud for at få placeringen...
Skal placeringen ikke vises inde på CD'ens detaljeside?

Den er jeg lidt nysgerrig omkring den her... lytter lige med :)
Avatar billede grafikeren Nybegynder
23. december 2003 - 13:18 #3
... Den skal vises på hver produktside (ligesom placeringen her på eksperten)

Prøver lige koden af. Men hvad hvis 2 produkter begge har 5 i point?
Avatar billede zkiifreak Nybegynder
23. december 2003 - 13:23 #4
Du kan jo også sætte flg ind i while-løkken i stedet:
for i=0 to 4
[UDSKRIV SOM FØRHEN}
next
Så skriver den kun 5 records ud... Skal du have flere ud, skal du bare ændre i i's værdi fra og til...
Hvis flere produkter har samme pointtal, så har de jo også samme placring for som sådan, og så er det jo ligemeget, om den første eller anden ligger på henholdsvis tredje- eller fjerdepladsen respektivt (eksempelvis)...

Zkii
Avatar billede zkiifreak Nybegynder
23. december 2003 - 13:30 #5
Ups.... det gik lidt for stærkt... det skal nok være ngt m det her, hvis den max skal skrive 5 ud:
tmp = 1
while not InData.EOF
    if tmp <= 5 then
        Response.Write(InData("CD") & " har placering nr.: " & tmp)
        tmp = tmp+1
    end if
    InData.MoveNext()
Wend

Sorry for fejlen
Zkii
Avatar billede deeflate Nybegynder
23. december 2003 - 13:30 #6
En lidt omstændig løsning kunne være at have et script, som bliver kaldt efter en anmeldelse, som henter og sorterer alle poster efter zkiifreaks metode, og som så putter placeringen ind i et felt i db'en (i stedet for at skrive den ud).

Men det må næsten kunne gøres mere simpelt...
Avatar billede deeflate Nybegynder
23. december 2003 - 13:38 #7
Hmm... det er måske ikke så omstændigt endda...

Ser lige på det...
Avatar billede deeflate Nybegynder
23. december 2003 - 13:45 #8
Det her virker i hvert fald, så det kan du bygge lidt videre på:

<%

Set rs = Server.CreateObject("ADODB.RecordSet")
Set Conn = Server.CreateObject("ADODB.Connection")
strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("placering.mdb")

strSQL = "SELECT * FROM cd ORDER BY point DESC"

rs.Open strSQL, strDSN, 2, 2

tmp = 1

If not (rs.eof or rs.bof) Then
  Do until rs.eof
    rs("placering") = tmp
    rs.update
    tmp = tmp + 1
    rs.moveNext
  Loop
End if

response.Write "placeringen er nu opdateret"

%>
Avatar billede deeflate Nybegynder
23. december 2003 - 13:48 #9
Det kan så evt. udføres hver gang der bliver tildelt point.
Avatar billede zkiifreak Nybegynder
23. december 2003 - 13:53 #10
Smart egenligt! Og så alligevel ikke... For din database bliver én del større til faktisk ingen verdens nytte. Du sorterer dem bare ved udskrivning. Det tager brøkdele af et sekund længere, men det kommer du ikk at mærke. Det andet giver bare større DB, og hvis du vil gøre det hver gang der er kommet en ny record i DB'en, så bliver serveren meget optaget!!!
Avatar billede deeflate Nybegynder
23. december 2003 - 13:59 #11
Men hvis de skal vises som i "dine data" her på eksperten, skal de jo netop ikke skrives ud allesammen.

Så skal man jo kunne finde placeringen for den valgte post alene.
Avatar billede grafikeren Nybegynder
23. december 2003 - 18:13 #12
Den rigtige måde er zkiifreaks! Efter lidt ændringer kom scriptet til at virke.

Tak.
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
Kurser inden for grundlæggende programmering

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