webForumDet fria alternativet

Lista samma sak bara en gång?

Databaser & SQLur Databashanterare & SQL

10 svar · 608 visningar · startad av magnusfeldth

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#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!

SPiNMedlem 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.

magnusfeldthMedlem 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?

LarsGMedlem 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.

magnusfeldthMedlem 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?

nitro2k01Medlem sedan aug. 20039 342 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.)

magnusfeldthMedlem 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...

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#8

ingen som har nån idé?

@ndersMedlem sedan juni 200032 969 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

@ndersMedlem sedan juni 200032 969 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.

magnusfeldthMedlem 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

127 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)