23. januar 2003 - 10:16Der er
11 kommentarer og 1 løsning
List kun kategorier med indhold
Jeg har et script til at liste kategorier og indhold med, problemet er at den lister alle kategorier også hvis kategorien ikke indeholder nogen produkter.
SQL = "SELECT * FROM tilbudKategori" SET rs = Connect.Execute(SQL)
if not rs.EOF then do until rs.EOF
if Cint(Request.QueryString("linkid")) = rs("katID") then %> <a class="link1" href="bygma-tilbud.asp?menu=2"><b><%=rs("katNavn")%></b></a><br> <% else %> <a class="link1" href="bygma-tilbud.asp?linkid=<%=rs("katID")%>&menu=<%=request.querystring("menu")%>"><%=rs("katNavn")%></a><br> <% end if
if Cint(Request.QueryString("linkid")) = rs("katID") then
Set rs2 = Connect.Execute("SELECT * FROM tilbudVare WHERE uge = "&uge&" AND katID = " & request("linkid") & " Order by priotet asc")
if not rs2.EOF then do until rs2.EOF %> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="almfont">· <a class="link1" href="bygma-tilbud.asp?id=<%=rs2("vareID")%>&menu=<%=request.querystring("menu")%>&show=1"> <% if rs2("priotet")="A" then response.write "<b>" end if %> <%=rs2("varenavn")%> <% if rs2("priotet")="A" then response.write "</b>" end if %></a> </td> <td align="right" class="almfont"><%=formatcurrency(rs2("tilbudpris"),2)%></td> <td width="100"> </td> </tr> </table> <% rs2.MoveNext Loop rs2.close else 'fang tom end if
end if rs.movenext Loop rs.close else 'fang tom end if
Jeg vil kun have de kategorier ud der indeholder produkter.
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
Set rs2 = Connect.Execute("SELECT * FROM tilbudVare WHERE uge = "&uge&" AND katID = " & request("linkid") & " AND VareNavn <> "" Order by priotet asc")
Jeg vil dog forsvare min ved at hvis der ikke er nogle kategorier som indeholder vare en uge så vil IN med en tom () give en syntax fejl hvorimod min SQL sætning vil give et tomt recordset.
katID IN () <--- giver syntax fejl og man vil se en fejl side.
Det er fordi at IN-operatoren sorterer dubletter i feltet katID fra før at der sker en sammenligning. Dit JOIN tvinger den til at fremstille et meget stort resultat, som den først derefter fjerner dubletter fra.
Det kommer dog an på hvilket system, det drejer sig om, da det i sidste ende afhænger af databasens query analyzer.
Hvad angår din kommentar med een kontra to SELECT-sætninger, så sker der dybest set det samme - vi kigger i to tabeller. Derfor bør det ikke have indflydelse på performace.
Det som man ofte taler om ifm. mange SELECT-sætninger er når man sender mange separate SELECT-forespørgsler til databasen, hvilket belaster serveren fordi de netop udgør separate forespørgsler.
Det er en god kommentar du er kommet med, jeg tror det er svært at generaliser da det vil afhænge af databasen og hvordan den arbejder. Jeg ved ikke hvordan databasen query analyser virker jeg kan kun gætte på hvad der sker.
"een kontra to SELECT-sætninger" Select'en i IN udføres først og så udføres den uden om, det giver to select. Ja Ok join vil bliver større end nødvendig før der sorteres fra, og dermed går der mere tid.
Jeg har herller ikke mulighed for at teste lige nu, anden end i Access Query-builder og den giver syntas fejl ved IN (). Det er muligt den udadtil via ADO vil give et tomt recordet uden at melde fejl, det må komme an på en prøve senere i dag.
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.