Avatar billede bgo Nybegynder
27. juni 2003 - 15:27 Der er 5 kommentarer og
1 løsning

tre selects til 1 select

Efter en halv times spildt arbejde på at stille dette spørgsmål på en langt bedre måde, må I bære over med mig når jeg nu smækker kode der skal bruges tid på at forstå herind...

Jeg har i følgende tre selects som jeg meget gerne vil have lavet om til en enkelt med samme resultat. Blot er jeg ingen sql-haj og aner derfor ikke hvordan det skal gøres.

forums=""

Set Connect = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/forum.mdb")
Connect.Open strDSN

Set rs = Connect.Execute("Select Format(tid,'hh:mm dd-mm-yyyy') as DatoStr, Format(tid,'dd-mm-yyyy') as laststr2, Format(tid,'hh:mm') as laststr3, * From debat WHERE (fid=" & request.querystring("fid") & " and svarpaa=0) ORDER BY tid DESC")

while not rs.EOF
forums=forums & "<tr><td height=""2""><img src=""spacer.gif"" height=""2""></td></tr><tr>" & vbCrLf
forums=forums & "    <td>" & vbCrLf
forums=forums & "    <table width=""499"" border=""0"" cellspacing=""0"" cellpadding=""0"">" & vbCrLf
forums=forums & "        <tr>" & vbCrLf
forums=forums & "    <td width=""2"" height=""2"" background=""lt.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "    <td height=""2"" background=""t.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "    <td width=""2"" height=""2"" background=""rt.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "  </tr>" & vbCrLf
forums=forums & "  <tr>" & vbCrLf
forums=forums & "    <td width=""2"" background=""l.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "    <td bgcolor=""#BBBBFF"">" & vbCrLf
forums=forums & "            <table width=""499"" border=""0"" cellspacing=""0"" cellpadding=""1"">" & vbCrLf
forums=forums & "              <tr bgcolor=""#BBBBFF"">" & vbCrLf


    forums=forums & "<td width=""187""><a href='visthread2.asp?k=" & request.querystring("k") & "&show=all&id=" & request.querystring("id") & "&navn=" & request.querystring("navn") & "&hid=" & request.querystring("hid") & "&fid=" & request.querystring("fid") & "&fnavn=" & request.querystring("fnavn") & "&ufnavn=" & request.querystring("ufnavn") & "&thread=" & rs("id") & "&tnavn=" & rs("overskrift") & "&page=1'>" & rs("overskrift") & "</a></td>" & vbCrLf
    forums=forums & "<td width=""127""><p>" & rs("forfatter") & "</p></td>"
   
   
    hid=rs("id")

        Set Connect2 = Server.CreateObject("ADODB.Connection")
        strDSN2 = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/forum.mdb")
        Connect2.Open strDSN2

        Set rs2 = Server.CreateObject("ADODB.Recordset")
        'Set rs2 = Connect.Execute("Select * From forum WHERE (fid=" & hid & ") ORDER BY id ASC")
        rs2.Open "Select * From debat WHERE (svarpaa=" & rs("id") & ") ORDER BY id ASC", Connect2, 3, 1

'            rs2.movefirst
'            rs2.movelast       
            forums=forums &"<td width=""70""><p align=""right"">" & rs2.RecordCount & "</p></td>"
           
                Set Connect3 = Server.CreateObject("ADODB.Connection")
                strDSN3 = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/forum.mdb")
                Connect3.Open strDSN3

                Set rs3 = Server.CreateObject("ADODB.Recordset")
                'Set rs2 = Connect.Execute("Select * From debat WHERE (hid=" & hid & ") ORDER BY tid DESC")
                rs3.Open "Select Format(tid,'hh:mm dd-mm-yyyy') as DatoStr, Format(tid,'dd-mm-yyyy') as laststr2, Format(tid,'hh:mm') as laststr3, * From debat WHERE (oplæg=" & rs("id") & ") ORDER BY tid DESC", Connect3, 3, 1

sidst=""
       
                    'rs3.movefirst
        '            rs3.movelast       
                    forums=forums & "<td width=""115""><p align=""right"">"
                    if rs3.recordcount=0 then
                    test=Cstr(rs("laststr2"))
        test2=Cstr(Date())
        test3=Cstr(Date()-1)
        if test=test2 then
            sidst="<b>Idag</b> " & rs("laststr3")
        end if
            if test=test3 then
                sidst="<b>Igår</b> " & rs("laststr3")
            end if
       
        if sidst="" then
            sidst=rs("DatoStr")
        end if
                    forums = forums & sidst
                    else
                    test=Cstr(rs3("laststr2"))
        test2=Cstr(Date())
        test3=Cstr(Date()-1)
        if test=test2 then
            sidst="<b>Idag</b> " & rs3("laststr3")
        end if
            if test=test3 then
                sidst="<b>Igår</b> " & rs3("laststr3")
            end if
       
        if sidst="" then
            sidst=rs3("DatoStr")
        end if
                    forums = forums & sidst
                    end if
                    forums=forums & "</p></td>"

       
       

                rs3.Close
                Set rs3 = Nothing
   
                Connect3.Close
                set Connect3 = Nothing


       
       

        rs2.Close
            Set rs2 = Nothing

        Connect2.Close
        set Connect2 = Nothing
       
forums=forums & "        </tr>" & vbCrLf
forums=forums & "            </table>" & vbCrLf
forums=forums & "          </td>" & vbCrLf
forums=forums & "    <td width=""2"" background=""r.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "  </tr>" & vbCrLf
forums=forums & "  <tr>" & vbCrLf
forums=forums & "    <td width=""2"" height=""2"" background=""lb.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "    <td height=""2"" background=""b.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "    <td width=""2"" height=""2"" background=""rb.gif""><img src=""spacer.gif"" width=""2"" height=""2""></td>" & vbCrLf
forums=forums & "  </tr>" & vbCrLf
forums=forums & "</table>" & vbCrLf
forums=forums & "    </td>" & vbCrLf
forums=forums & "  </tr>" & vbCrLf
    rs.movenext
wend

rs.Close
    Set rs = Nothing

Connect.Close
set Connect = Nothing
Avatar billede slash Nybegynder
28. juni 2003 - 09:07 #1
hvis du prøver at lave et forum så må rekursion være løsningen.... men hvorfor opfinde den dybe tallerken igen --> brug da snitz --> http://forum.snitz.com/

det virker og det koster ikke noget - du kan downloade det og sætte det op lokalt....
Avatar billede bgo Nybegynder
28. juni 2003 - 13:33 #2
slash:

"hug-og-brug" lærer jeg ikke noget af :) Og det er hovedformålet med det site jeg bygger - at lære noget :) Det er også sjovere.

Derudover har jeg ikke lyst til at bruge hele min ferie på at forstå en andens kode for at tilpasse den mit site :) Min erfaring med det er ikke god - altid er det opbygget med sider der ikke er brug for i mit kram, og/eller sider der bare gør det langt mere uoverskueligt for både brugere og mig :)  Grundfunktionerne i et forum er jo ikke så vanskelige at lave - men det sjove kommer i de ekstrafunktioner jeg vil bygge ind i det :)

Men et par timer på snitz kan jeg måske godt afse - måske findes svaret dér - hvis altså koden er til at forstå :)

Rekursion har jeg ikke haft med at gøre siden TurboPascal 7 - og det er efterhånden mange år siden.

Dog har jeg fået et hint om at jeg kunne lave noget ala:

SELECT A,B,C FROM TABEL WHERE BETINGELSE = 1 UNION ALL
SELECT A,B,C FROM TABEL WHERE BETINGELSE = 2 UNION ALL
SELECT A,B,C FROM TABEL WHERE BETINGELSE ORDER BY 3 DESC;

Dét vil jeg prøve at lege lidt videre med :)
Avatar billede dta Nybegynder
30. juni 2003 - 10:15 #3
Du skal bruge SELECT DISTINCTROW hvis de variabler som du trækker ud (SELECT DISTINCTROW A, B, C) i dette tilfælde A, B, C er ens så kommer der kun en række ud af det.

:0)
Avatar billede dta Nybegynder
30. juni 2003 - 10:18 #4
I ovenstående bruger du samme TABEL hvorfor du kan bruge
SELECT A;B;C FROm TABEL WHERE (BETINGELSE = 1) OR (BETINGELSE = 2) OR (BETINGELSE = ???) ORDERED BY 3 DECS;

Skal du lave UNION på forskellige tabeller så skal de indeholde de samme felter. Jeg mener ikke at du skal bruge ALL i udtrykker kun UNION.

:o)
Avatar billede bgo Nybegynder
21. december 2003 - 21:43 #5
sorry, har ikke været inde længe, og min idé er droppet (bygger nyt fra bunden når den tid kommer).

så da jeg ikke fandt ud af det, lukker jeg spørgsmålet nu.
Avatar billede roenving Novice
21. december 2003 - 21:48 #6
-- og ikke en eneste kom med noget, som du kunne bruge/lære noget af ?-)
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

IT-JOB