Avatar billede axkris Nybegynder
12. december 2003 - 20:31 Der er 4 kommentarer og
1 løsning

Optimer sql-kode

Hej

Jeg har noget kode som laver en menu af 3 niveauer - Group, Category og Link - kalder jeg dem. En gruppe må kun vises, hvis der finde mindst en kategori i den, og en kategori må kun vises, hvis der findes mindst et link i den.

Menget simpelt, men det er min kode ikke blevet, fordi jeg ikke er så go til sql - den tager et min. at udføre på serveren og det er min webudbyder ikke så glad for ;-)

Så hvis du kan komme optimeret version, så giver jeg dig 200 points. :-D

__________________________________________________________


    strSQL="select ID, Title FROM LINKS_GROUPS order by Title"
      set rs = dataConn.execute(strSQL)
      do while not rs.BOF and not rs.EOF    
        strGroupTitle = "<br><b>" & rs("Title") & "</b><br>"
           
        strSQL2="select ID, Title FROM LINKS_CATEGORIES where GroupID = " & rs("ID") & " order by Title"
        set rs2 = dataConn.execute(strSQL2)

        do while not rs2.BOF and not rs2.EOF                       
              strSQL3="select ID, Title FROM LINKS_FSH where Publish <= '" & alternativeDate() & "' and CategoryID = " & rs2("ID")
            set rs3 = dataConn.execute(strSQL3)

              if not rs3.EOF then
                if not strGroupTitle = rs("title") then
                    strMenu = strMenu & strGroupTitle
                    strGroupTitle = ""
                end if
                strMenu = strMenu & "<a href=""index.asp?ID=" & rs2("ID") & "&title=" & rs2("Title") & """>" & rs2("Title") & "</a><br>"
            end if

              rs2.MoveNext     
          Loop
   
        rs.MoveNext   
    loop
Avatar billede eagleeye Praktikant
12. december 2003 - 20:49 #1
Du kan det i en SQL sætning som denne:

SQL = "SELECT DISTINCT LINKS_GROUPS.Title, LINKS_CATEGORIES.Title FROM (LINKS_GROUPS INNER JOIN LINKS_CATEGORIES ON LINKS_GROUPS.id = LINKS_CATEGORIES.groupID) INNER JOIN LINKS_FSH ON LINKS_CATEGORIES.id = LINKS_FSH.CategoryID WHERE LINKS_FSH.Publish <= '" & alternativeDate() & "' ORDER BY LINKS_GROUPS.Title, LINKS_CATEGORIES.Title;"



Eller skrevet over nogle linjer:
SQL = "SELECT DISTINCT LINKS_GROUPS.Title, LINKS_CATEGORIES.Title FROM "
SQL = SQL & "(LINKS_GROUPS INNER JOIN LINKS_CATEGORIES ON LINKS_GROUPS.id =  LINKS_CATEGORIES.groupID) "
SQL = SQL & "INNER JOIN LINKS_FSH ON LINKS_CATEGORIES.id = LINKS_FSH.CategoryID "
SQL = SQL & "WHERE LINKS_FSH.Publish <= '" & alternativeDate() & "' "
SQL = SQL & "ORDER BY LINKS_GROUPS.Title, LINKS_CATEGORIES.Title;"
Avatar billede eagleeye Praktikant
12. december 2003 - 20:53 #2
Ok det skal være:


SQL = "SELECT DISTINCT LINKS_GROUPS.Title AS GROUPS_Title, LINKS_CATEGORIES.Title AS CAT_Title, LINKS_CATEGORIES.id FROM (LINKS_GROUPS INNER JOIN LINKS_CATEGORIES ON LINKS_GROUPS.id = LINKS_CATEGORIES.groupID) INNER JOIN LINKS_FSH ON LINKS_CATEGORIES.id = LINKS_FSH.CategoryID WHERE LINKS_FSH.Publish <= '" & alternativeDate() & "' ORDER BY LINKS_GROUPS.Title, LINKS_CATEGORIES.Title;"
Avatar billede eagleeye Praktikant
12. december 2003 - 20:56 #3
og udskrive det som:


SQL = "SELECT DISTINCT LINKS_GROUPS.Title AS GROUPS_Title, LINKS_CATEGORIES.Title AS CAT_Title, LINKS_CATEGORIES.id FROM (LINKS_GROUPS INNER JOIN LINKS_CATEGORIES ON LINKS_GROUPS.id = LINKS_CATEGORIES.groupID) INNER JOIN LINKS_FSH ON LINKS_CATEGORIES.id = LINKS_FSH.CategoryID WHERE LINKS_FSH.Publish <= '" & alternativeDate() & "' ORDER BY LINKS_GROUPS.Title, LINKS_CATEGORIES.Title;"

set rs = dataConn.execute(SQL)
do while not rs.BOF and not rs.EOF
  if strGroupTitle <> rs("GROUPS_Title") then
    strMenu = strMenu & "<br><b>" & rs("GROUPS_Title") & "</b><br>"
    strGroupTitle = rs("GROUPS_Title")
  end if

  strMenu = strMenu & "<a href=""index.asp?ID=" & rs("ID") & "&title=" & rs("CAT_Title") & """>" & rs("CAT_Title") & "</a><br>"
 
  rs.Movenext
loop
Avatar billede axkris Nybegynder
12. december 2003 - 21:50 #4
Totalt fantastisk syre syre sejt :-D Smukt!!! Hvad mere kan jeg sige.

Nu tager det ikke længere et min. at køre scriptet men faktisk kun et sek. Mange, mange tak og tryk så lige svar :-D
Avatar billede eagleeye Praktikant
12. december 2003 - 21:53 #5
Ok her er et svar ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester