18. august 2005 - 11:58Der er
33 kommentarer og 1 løsning
Grupering, kun vise den første i et sæt
Hejsa...
Jeg vil høre om der er nogen der kan gi mig en ide om hvordan jeg får nedenstående kode til kun at vise den første post af mit gruperings sæt.
Har et felt i en access database der hedder visning, som holder posterne sammen med eks. et 1 tal, et 2 tal osv.
Hvordan får jeg den til kun at vise den første post i sådan et sæt???
Min kode: <% select case request.querystring("ListProducts") case ("15") Response.Write "<b>Alle spejlene herunder fåes i op til 20 størrelser, se mere info!</b>" Response.Buffer = True SET Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/database.mdb") set rsVisningMax = Conn.Execute("Select Max(Visning) as maks_Visning FROM 15") maks_Visning = rsVisningMax("maks_Visning") rsVisningMax.close set rsVisningMax = nothing
For i = 1 to maks_Visning Sql = "Select * FROM 15 where Visning = " & i & " ORDER BY varenr ASC;" set rs = Conn.Execute(SQL) Do until rs.EOF
If blnBGColor = True Then strBGColor = "#FFFFFF" blnBGColor = False Else strBGColor = "#E5EAEF" blnBGColor = True End If %>
<% rs.movenext loop rs.close set rs = nothing Response.Write "<br><br>" next conn.close set conn = nothing end select %>
Er der nogen derude der ville være filnk at hjælpe med det??
jeg er ikke helt sikker på hvad du mener - men du kan jo undlade at lave en løkke der udskriver spejlene.
i = 1 'tager den første i = maks_Visning 'den den største/sidste 'For i = 1 to maks_Visning Sql = "Select * FROM 15 where Visning = " & i & " ORDER BY varenr ASC;" set rs = Conn.Execute(SQL) Do until rs.EOF
If blnBGColor = True Then strBGColor = "#FFFFFF" blnBGColor = False Else strBGColor = "#E5EAEF" blnBGColor = True End If rs.movenext Loop rs.close set rs = nothing Response.Write "<br><br>" 'next
oki, det ser meget brugbart ud - prøver det lige af..
For lige at forklare det færdigt, så har jeg min database med ca 1200 vare numre i på nogle spejle. Men der er kun ca 65 modeller, det vil sige at den ikke skal vise de 1200 men kun de 65. Og det havde jeg tænkt skulle ske ved at give de modeller der er ens et tal. Så eks. de første 14 får et 1 tal, de næste 14 et 2 tal osv.
Den aller første kode var min forhenværende som skrev alt ud som du kan se. Jeg vil gerne have den til kun at skrive den første post ud i hver "sæt" - altså kun den første post med tallet 1 osv. Så man kun ser de 65 modeller og ikke alle de ca. 1200 poster som databasen indeholder.
Jeg har ingen ide om hvordan det skal laves, kan du hjælpe mig lidt??
Nåhh på den måde:) Jeg har en masse informationer og selvfølgelig også varenummer. Men jeg skelner dem fra hianden med tal, så hver model har et tal. Der er 65 modeller i 14 størrelser, så de er kædet sammen med et tal. Kan man så ikk bare få den til at vise den første, og kun den? Fordi jeg har en side med mere information hvor alle størrelserne bliver vist, så jeg ville gerne undgå at de så også skulle vises på oversigten, det er jo ikk rigtig nødvendig.
hmmm er ikk så heldig at det virker :) Men det er jo nok mig, hehe.. Man kan ikke select flere med en af de koder du skrev herover vel? Man kan kun select varenr ikk?
er varenummeret unikt? har du 1200 unikke varenumre? og 65 forskellige modeller - men jeg forstår stadig ikke hvordan du kender modellerne fra hinanden. Er varenummeret en del af modelnummeret?
varenummeret er unikt, men det er mit id felt der nøgle. Jamen jeg kendder modellerne fra hianden med tal, som sagt - har en kolonne der hedder visning, kun til tal. Så altså de første 14 poster i databasen er samme model, MEN 14 størrelse de har så fået tallet 1 i kolonnen visning. Giver det mening - forstår du mig?
ja - det hjælper det vil sige at din tabel ser nogenlunde sådan ud:
tabel: 15
id, varenr, visning, navn, etc
du har ca. 1200 rækker i din tabel, 15, og vil gerne have vist bare et varenummer og een visning. Så er det jeg vil prøve således:
<% select case request.querystring("ListProducts") case ("15") Response.Write "<b>Alle spejlene herunder fåes i op til 20 størrelser, se mere info!</b>" Response.Buffer = True SET Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/database.mdb") 'åben recordsættet gruppér på varenummeret set rsVarer = Conn.Execute("Select varenr FROM 15 GROUP BY varenr ORDER BY varenr;")
strBGColor = "#FFFFFF" if rsVarer.eof = False then While rsVarer.eof = False If strBGColor = "#FFFFFF" Then strBGColor = "#FFFFFF" Else strBGColor = "#E5EAEF" End If Response.Write rsVarer("varenr")
rsVarer.Movenext Wend Else Response.Write "Ingen poster i db!" End if
Så er jeg ved computeren igen :) Jeg har prøvet den kode du venligst har leveret i fuld skrevet tilstand, men det fungere ikk helt, får en fejl-500.
Men tror du er ved at følge mig, hvordan jeg godt kunne tænkt mig det..
Tabel: 15 Kolonner: id, varenr, visning, osv. Poster: ca. 1200 Modeller: ca. 65
Et eksempel: De første 14 poster i tabellen hedder id 1 til 14, de har alle sammen i kolonnen visning, fået et 1 tal - således at de hænger sammen. De næsre 14 poster altså fra og med 15 til 29 har i kolonnen visning fået et 2 tal, så de gerne skulle "hænge" sammen.
Så var var det at jeg godt kunne tænke mig, at asp koden kun skulle udskrive den første post i et "sæt". Så det ville jo så være post 1 og post 15 osv. Man ville kunne se på siden.
Så der kun ville blive vidst de ca. 65 modeller på siden. Det er faktisk ikk så svært, TROR jeg ikk :) Jeg er bare ikk en hej til det...
<% select case request.querystring("ListProducts") case ("15") Response.Write "<b>Alle spejlene herunder fåes i op til 20 størrelser, se mere info!</b>" Response.Buffer = True SET Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/database.mdb") 'åben recordsættet gruppér på varenummeret set rsVarer = Conn.Execute("SELECT visning, FIRST(varenr) AS FORSTE_POST FROM 15 GROUP BY visning ORDER BY FIRST(varenr);")
strBGColor = "#FFFFFF" if rsVarer.eof = False then While rsVarer.eof = False If strBGColor = "#FFFFFF" Then strBGColor = "#FFFFFF" Else strBGColor = "#E5EAEF" End If Response.Write "Varenummeret: " & rsVarer("FORSTE_POST") & "<br>" Response.Write "Visning: " & rsVarer("visning") & "<br>" Response.Write "<hr>" rsVarer.Movenext Wend Else Response.Write "Ingen poster i db!" End if
hiks en sidste ting? Hvordan selecter jeg flere ting, uden det ødelægger noget? Ved godt at det ikke fungere nu, da jeg har selectet flere ting.
<% select case request.querystring("ListProducts") case ("15") Response.Write "<b>Alle spejlene herunder fåes i op til 20 størrelser, se mere info!</b>" Response.Buffer = True SET Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/database.mdb") 'åben recordsættet gruppér på varenummeret set rsVarer = Conn.Execute("SELECT visning,jpg,beskrivelse,jpg_s,rank,id,navn FIRST(varenr) AS FORSTE_POST FROM 15 GROUP BY visning ORDER BY FIRST(varenr);")
strBGColor = "#FFFFFF" if rsVarer.eof = False then While rsVarer.eof = False If strBGColor = "#FFFFFF" Then strBGColor = "#FFFFFF" Else strBGColor = "#E5EAEF" End If %> <table cellpadding="0" cellspacing="0" width="100%"> <tr> <td> <a href='viewpicture.asp?picture=<%= rs("jpg") %>&beskrivelse=<%= rs("beskrivelse") %>' onclick="NewWindow(this.href,'myname','525','530','yes');return false"><img width="50" height="50" src="<%= rs("JPG_S") %>" alt="" border="0"></a> </td> <td width="65%" class="case" bgcolor="<%= strBGColor %>" style="padding: 5px;"> <b><%= rs("VareNr") %></b><br> <%= rs("Beskrivelse") %><br> </td> <td width="20%" bgcolor="<%= strBGColor %>" align="right"> <a href="default.asp?ListProducts=show14&menu=30&tabel=<%= rs("Rank") %>&ID=<%= rs("ID") %>&page=<%= rs("navn") %>"> <img src="images/info.jpg" alt="Læs mere om dette produkt" border="0"> </a> </td> </tr> </table> <% rsVarer.Movenext Wend Else Response.Write "Ingen poster i db!" End if
set rsVarer = Conn.Execute("SELECT visning FIRST(varenr,jpg,beskrivelse,jpg_s,rank,id,navn) AS FORSTE_POST FROM 15 GROUP BY visning ORDER BY FIRST(varenr);")
set rsVarer = Conn.Execute("SELECT visning, FIRST(varenr) AS 1varenr, FIRST(jpg) AS 1jpg, FIRST(beskrivelse) AS 1beskrivelse, FIRST(jpg_s) AS 1jpg_s, FIRST(rank) AS 1rank, FIRST(id) AS 1id, FIRST(navn) AS 1navn FROM 15 GROUP BY visning ORDER BY FIRST(varenr);")
HEHE, ja det havde jeg så ALDRIG fået mig fusket frem til :) Men får fejl i linie 2901 - og i den henter den bare jpg,beskrivelse og jpg_s ud. De findes selvfølgelig alle sammen i databasen.
Fejl: Item cannot be found in the collection corresponding to the requested name or ordinal.
De findes alle sammen i databasen, det er ikke noget med det First halløj vel?
du skal huske at ændre din rsVarer("et-eller-anden-attribut") til det der er skrevet efter AS i sql'en! Ellers vil den ikke kunne finde det pågældende "item", som den skriver!
Hmmmm hvis jeg fjerner alle variablerne og kun lader den hente <%= rs("varenr") %> Melder den samme fejl, selvfølgelig bare i en anden linie, da den eksisterend kode er fjernet...
Altså koden ser sådan her ud nu, og får stadig den samme fejl:
<% select case request.querystring("ListProducts") case ("15") Response.Write "<b>Alle spejlene herunder fåes i op til 20 størrelser, se mere info!</b>" Response.Buffer = True SET Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/database.mdb") 'åben recordsættet gruppér på varenummeret set rsVarer = Conn.Execute("SELECT visning, FIRST(varenr) AS 1varenr, FIRST(jpg) AS 1jpg, FIRST(beskrivelse) AS 1beskrivelse, FIRST(jpg_s) AS 1jpg_s, FIRST(rank) AS 1rank, FIRST(id) AS 1id, FIRST(navn) AS 1navn FROM 15 GROUP BY visning ORDER BY FIRST(varenr);")
strBGColor = "#FFFFFF" if rsVarer.eof = False then While rsVarer.eof = False If strBGColor = "#FFFFFF" Then strBGColor = "#FFFFFF" Else strBGColor = "#E5EAEF" End If %> <%= rs("1varenr") %> <% rsVarer.Movenext Wend Else Response.Write "Ingen poster i databasen!" End if
hmm i tænkeboks. - det virker ikke helt logisk. :(
kan du prøve i stedet med denne sql i stedet:
set rsVarer = Conn.Execute("SELECT visning, MIN(varenr) AS 1varenr, FIRST(jpg) AS 1jpg, FIRST(beskrivelse) AS 1beskrivelse, FIRST(jpg_s) AS 1jpg_s, FIRST(rank) AS 1rank, FIRST(id) AS 1id, FIRST(navn) AS 1navn FROM 15 GROUP BY visning ORDER BY visning;")
hmmm det virker skørt - det virker heller ikk... Kan det have noget at gøre med at min varenr indeholde bogstaver ala SP14434 ????? Og så kan SQL ikke arbejde med den?
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.