23. december 2003 - 13:01Der 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.
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.
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)...
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
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).
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
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!!!
Den rigtige måde er zkiifreaks! Efter lidt ændringer kom scriptet til at virke.
Tak.
Synes godt om
Ny brugerNybegynder
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.