webForumDet fria alternativet

Sorteringsproblem

2 svar · 244 visningar · startad av Koggen

KoggenMedlem sedan juni 2002169 inlägg
#1

Hej
Jag har ett problem jag brottats med länge nu:

Jag har två tabeller - betalning och person. Jag vill lista alla personer vars id finns i båda tabellerna, och har det sökta årtalet i fältet regyear i tabellen betalning.

Jag kunna sortera listan efter id, efternamn, fornamn, stad och land (dom uppgifterna finns i tabellen person).

Problemet är att när den andra SQL-satsen (som hämtar från tabellen person) körs finns bara EN aktuell post, och därför blir sortering rätt enkel ;-) Jag har provat många olika varianter, men det funkar inte hur jag än gör.

Hoppas ni fattar vad jag menar, det är rätt svårt att förklara
:l

'''''''''''''''
'Kod:

SQLbet = "SELECT * from betalning WHERE regyear = '" & request.form("regyear") & "'"

Set RecSetbet = CreateObject("ADODB.Recordset")
recSetbet.open SQLbet, Connect,1 , 2

' Om inga poster hittas
if recSetbet.eof then
response.write "<h3>Inga poster hittades.</h3>"

else
%>
<table width="650" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>ID</td>
<td>Förnamn</td>
<td>Efternamn</td>
<td>Ort</td>
<td>Land</td>
</tr>

<%
' Om poster hittas så körs loopen
i = 0
do until recSetbet.eof
SQLpers = "SELECT * FROM person WHERE id = " & recSetbet("id") & " ORDER BY " & request.form("sortering")
Set RecSetpers = CreateObject("ADODB.Recordset")
recSetpers.open SQLpers, Connect, 1, 2

' *** Här ges varannan rad i listan annan färg ***
i=i+1
if i mod 2=0 then
farg = " bgcolor='#F0F0F0'"
javafarg = "'#F0F0F0'"
else
farg = " bgcolor='#E4E4E4'"
javafarg = "'#E4E4E4'"
end if

do until recSetpers.eof
%>
<tr onMouseOut="this.bgColor=<%=javafarg%>" onMouseOver="this.bgColor='#FFFFFF'"<%=farg%>">
<td><%=recSetpers("id")%></td>
<td><%=recSetpers("fornamn")%></td>
<td><%=recSetpers("efternamn")%></td>
<td><%=recSetpers("stad")%></td>
<td><%=recSetpers("land")%></td>
</tr>

<%
recSetpers.moveNext
loop

recSetbet.moveNext
loop
%>
</table>
<%
end if
%>

OveRRidEMedlem sedan feb. 200112 078 inlägg
#2

Gör en INNER JOIN, du skall aldrig nästla recordset. Jag bytte även ut din gamla andra recordset-loop och satte det nya recordset:et (recSetbet) där det gamla var. Kanske borde du även överväga att använda execute istället för open med de där konstanterna. :) Jag stängde även connect och ditt recordset längst ner i koden.

[red]SQLbet = "SELECT * FROM betalning b INNER JOIN person p ON b.id = p.id WHERE" & _
"b.regyear = '" & request.form("regyear") & "' ORDER BY p.id, p.efternamn, p.fornamn, p.stad, p.land"[/red]

Set RecSetbet = CreateObject("ADODB.Recordset") 
recSetbet.open SQLbet, Connect,1 , 2 

' Om inga poster hittas 
if recSetbet.eof then 
response.write "<h3>Inga poster hittades.</h3>" 

else 
%> 
<table width="650" border="0" cellpadding="0" cellspacing="0"> 
<tr> 
<td>ID</td> 
<td>Förnamn</td> 
<td>Efternamn</td> 
<td>Ort</td> 
<td>Land</td> 
</tr> 

<% 
' Om poster hittas så körs loopen 
i = 0 
do until recSetbet.eof 

' *** Här ges varannan rad i listan annan färg *** 
i=i+1 
if i mod 2=0 then 
farg = " bgcolor='#F0F0F0'" 
javafarg = "'#F0F0F0'" 
else 
farg = " bgcolor='#E4E4E4'" 
javafarg = "'#E4E4E4'" 
end if 

do until recSetbet.eof 
%> 
<tr onMouseOut="this.bgColor=<%=javafarg%>" onMouseOver="this.bgColor='#FFFFFF'"<%=farg%>"> 
[red]<td><%=recSetbet("id")%></td> 
<td><%=recSetbet("fornamn")%></td> 
<td><%=recSetbet("efternamn")%></td> 
<td><%=recSetbet("stad")%></td> 
<td><%=recSetbet("land")%></td> [/red]
</tr> 

<% 
recSetbet.moveNext 
loop 
%> 
</table> 
<% 
end if 

[red]set recSetbet = nothing
set connect = nothing[/red]
%>
KoggenMedlem sedan juni 2002169 inlägg
#3

Tack

Tackar för SQL-hjälpen :-)
Nu funkar det som jag vill.

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