webForumDet fria alternativet

Lista samma sak bara en gång?

Databaser & SQL

10 svar · 608 visningar · startad av magnusfeldth

Medlem sedan jan. 20034 480 inlägg
Frågan#1

Nu kommer ytterligare en fråga:

Säg att en databas ser ut på följande sätt:
Primärnyckel - prylid
Prylnamn
Prylkategori

Ur den här vill jag hämta ut alla prylkategorier, sedan under varje prylkategori lista alla prylar som hör till den prylkategorin i stil med

datorer
-dator 1
-dator 2
-dator 3

mobiltelefoner
-mobiltelefon1
-mobiltelefon2

GPS
-GPS1
-GPS2

osv.

Jag kan dock inte komma på hur jag skall skriva koden för en accessdatabas med ASP...

Kom igen wF-genier, work your magic!

Medlem sedan mars 20007 896 inlägg
#2

Jag skyller det här inlägget på två raka veckors arbete, en sommar utan semester och allmänt hjärnsläpp.

Medlem sedan jan. 20034 480 inlägg
#3

hur menar du då?

jag tänkte först använda ett
visa = "select nånting nånting order by kategori"

och sen ytterligare en kallelse för prylarna inom den kategorin
visa = "select osv where prylkategori = '" & trim(recset("prylkategori")&"'
loop

loop på kategori

hur kan jag få in din kod här SPiN?

Medlem sedan dec. 200012 464 inlägg
#4
select Prylkategori,
         Prylnamn
  from Prylar
 order by prylkategori

Du får själv hålla reda på (i din ASP-kod) när du får en ny kategori och i det läget skriva ut namnet. Det är inget som man löser med hjälp av SQL.

Medlem sedan jan. 20034 480 inlägg
#5

hm, då kanske det är asp-koden jag behöver hjälp med... behöver tråden flyttas?

Medlem sedan aug. 20039 340 inlägg
#6

För att förtydliga vad LarsG menar: Du kommer få ut datat på denna form:

[b]Prylkategori	Prylnamn[/b]
Datorer		Dator 1
Datorer		Dator 2
Datorer		Dator 3
Motor		Mobil 1
Mobiler		Mobil 2
Mobiler		Mobil 3
GPS		GPS 1
GPS		GPS 2
GPS		GPS 3

Det din kod måste göra i det fallet är att detektera när det kommer en ny kategori. Lite pseudokod:

tmpKat = ""

while not rs.eof()
    if tmpKat <> rs.kategorinamn
        skrivutkategori rs.kategorinamn
        tmpKat = rs.kategorinamn
    end if

    skrivutpryl rs.prylnamn

    rs.next
end while

Detta är bara pesudokod, och knappast i närheten gångbar ASP. Men jag hoppas att du ska se vilken logik som behövs i ASP'n. (Ungefär som om jag skulle snacka franska, utifrån min gamla skolfranska... Jag skulle få ur mig ett par ord, kanske till och med göra mig förstådd, men det skulle ändå låta skrattretande.)

Medlem sedan jan. 20034 480 inlägg
#7

Här är min faktiska kod just nu:

<%
Set RecSet2 = Server.CreateObject("ADODB.Recordset")
   Visa2 = "SELECT * FROM collectiondb WHERE visa = 'ja'  order by kategori ASC "

   RecSet2.Open Visa2, Connect, adOpenStatic, adLockOptimistic 
%><% Do Until RecSet2.EOF %><div id="text">

<div id="listatop"><b><% = Ucase(RecSet2("kategori")) %></b></div>
</div>
<div class="box"><%		
             
   Set RecSet3 = Server.CreateObject("ADODB.Recordset")
   Visa3 = "SELECT * FROM collectiondb WHERE visa = 'ja' and kategori = '" & Trim(Recset2("kategori")) & "' order by collectionid DESC "

   RecSet3.Open Visa3, Connect, adOpenStatic, adLockOptimistic 
                   %>
                <% Do Until RecSet3.EOF %>

<div id="minibox"><h5><a href="images/<% = RecSet3("bildstor") %>" class="lightbox" title="<% = RecSet3("rubrik") %>"><img border="0" src="images/<% = RecSet3("bildmini") %>"></a><br><b><% = RecSet3("rubrik") %></b><br>
<% = RecSet3("pris") %> kr</h5></div>
<% RecSet3.Movenext
                loop
              
                %></div><% RecSet2.Movenext
                loop
              
                %>

Den listar dock om samma kategori lika många gånger som det finns prylar i den aktuella kategorin... så nu kommer tricket att få ett asp-skript som bara skriver ut den en gång... hm...

Medlem sedan jan. 20034 480 inlägg
#8

ingen som har nån idé?

Medlem sedan juni 200032 967 inlägg
#9

magnusfeldth skrev:

ingen som har nån idé?

Jo - nitro gav dig utmärkt pseudokod. Försök implementera efter hans exempel. :)

mvh

Medlem sedan juni 200032 967 inlägg
#10

Eller - om du vill göra det så enkelt som möjligt för dig utan att lära dig speciellt mycket - kan du ändra din första sql-fråga till:

   Visa2 = "SELECT DISTINCT kategori FROM collectiondb WHERE visa = 'ja'  order by kategori ASC "

Men det är helt klart bättre att göra det med en join klippa hela första frågeriet och sedan använda nitros pseudo-variant.

Medlem sedan jan. 20034 480 inlägg
#11

tack snabeln. klart jag vill lära mig, men med tidsbrist, feber och allmän 80 timmars arbetsvecka känns en snabb lösning ganska skön ibland

276 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)