Avatar billede babyworm Nybegynder
23. februar 2005 - 18:28 Der er 22 kommentarer og
1 løsning

fejl i sql sætning

Hej..

Jeg har i min database tre tabeller.

modul som indeholder id og modulnavn
modul_bind som indeholder id, pageid, modulid
page som indeholder id, menu osv..

Mit problem er i min sql sætning.. Jeg skal på min side have en dropdown som viser alle modulnavnene og en som hedder "INGEN - Skal være hovedmenu".. Hvis det id der står i querystringen er i modul_bind.pageid, skal den tage modulnavnet fra modul og lade den være selected.. ellers skal den bare stå på "INGEN - Skal være hovedmenu"

Jeg har lavet to eksempler.. den første viser hvilket modul der er tilknyttet, og nummer to viser alle moduler.. de skal slås sammen .. :D

    <tr>
      <td style="text-align:right;">Modul:</td>
      <td><select name="select" class="medium">
        <%
        strModulSQL = "SELECT modul_bind.id,modul_bind.pageid,modul_bind.modulid,modul.id,modul.modulnavn FROM modul,modul_bind WHERE modul_bind.pageid=" & strPid & " AND modul_bind.modulid=modul.id"
        Set ModulRs = connection.Execute(strModulSQL)

        If Not (ModulRs.EOF or ModulRs.BOF) Then
        %>
        <option selected value="<%=ModulRs("id")%>"><%=ModulRs("modulnavn")%></option>
        <%
        Else
        %>
        <option selected value="0">Ingen - skal være hovedmenu</option>
        <%
        End if
        %>
          </select>
      </td>
    </tr>
    <tr>
      <td style="text-align:right;">Modul:</td>
      <td><select name="select" class="medium">
        <%
        strModulSQL1 = "SELECT modul.id,modul.modulnavn FROM modul"
        Set ModulRs1 = connection.Execute(strModulSQL1)

        If Not (ModulRs1.EOF or ModulRs1.BOF) Then
        Do While Not (ModulRs1.EOF or ModulRs1.BOF)
        %>
        <option value="<%=ModulRs1("id")%>"><%=ModulRs1("modulnavn")%></option>
        <%
        ModulRs1.MoveNext
        Loop

        Else
        %>
        <%
        End if
        %>
          </select>
      </td>
    </tr>
Avatar billede eagleeye Praktikant
23. februar 2005 - 18:33 #1
Når der er to kolonner som hedder det samme i to forskellige tabeller er man nød til at lave et alias navn for den ene. Du har modul_bind.id og modul.id som begge hedder id prø at lave alias for den ene eks:

        strModulSQL = "SELECT modul_bind.id,modul_bind.pageid,modul_bind.modulid,modul.id as modulid,modul.modulnavn FROM modul,modul_bind WHERE modul_bind.pageid=" & strPid & " AND modul_bind.modulid=modul.id"


Vil du udskrive modul.id så bliver det:  modulRs("modulid")
Avatar billede babyworm Nybegynder
23. februar 2005 - 18:42 #2
Ja.. men hvordan så med option ?
Avatar billede babyworm Nybegynder
23. februar 2005 - 18:43 #3
Jeg skal jo have det sådan at hvis der ikke er noget modul tilknyttet, skal option selected være <option selected value="0">Ingen - skal være hovedmenu</option> Ellers skal den selected være den som står i modul_bind
Avatar billede eagleeye Praktikant
23. februar 2005 - 19:12 #4
Skal den liste alle moduler?  og hvis pageid=strPid så skal den option være valgt?
Avatar billede babyworm Nybegynder
23. februar 2005 - 19:13 #5
ja... og ellers skal ingen - .. være selected
Avatar billede eagleeye Praktikant
23. februar 2005 - 19:17 #6
ok så prøv at lave koden sådan her:


        <%
        strModulSQL = "SELECT modul_bind.id,modul_bind.pageid,modul_bind.modulid,modul.id,modul.modulnavn FROM modul,modul_bind WHERE modul_bind.modulid=modul.id"
        Set ModulRs = connection.Execute(strModulSQL)
        If Not (ModulRs.EOF or ModulRs.BOF) Then
          do while not ModulRs.EOF
          %>
            <option value="<%=ModulRs("id")%>"
          <% if Cstr(ModulRs("pageid"))=Cstr(strPid) then Response.Write " selected " %>
            ><%=ModulRs("modulnavn")%></option>
          <%
            rs.Movenext
          loop

        Else
        %>
        <option selected value="0">Ingen - skal være hovedmenu</option>
        <%
        End if
        %>
Avatar billede babyworm Nybegynder
23. februar 2005 - 19:18 #7
Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post.
/cmplicity/menu/setup.asp, line 146
Avatar billede eagleeye Praktikant
23. februar 2005 - 19:20 #8
hov  rs.Movenext skulle være  ModulRs.Movenext
Avatar billede babyworm Nybegynder
23. februar 2005 - 19:21 #9
Fandt fejlen.. men virker ikke helt optimalt :D

    <tr>
      <td style="text-align:right;">Modul:</td>
      <td><select name="select" class="medium">
            <%
            strModulSQL = "SELECT modul_bind.id,modul_bind.pageid,modul_bind.modulid,modul.id,modul.modulnavn FROM modul,modul_bind WHERE modul_bind.modulid=modul.id"
            Set ModulRs = connection.Execute(strModulSQL)
            If Not (ModulRs.EOF or ModulRs.BOF) Then
              Do While Not (ModulRs.EOF or ModulRs.BOF)
              %>
                <option value="<%=ModulRs("id")%>"
              <% if Cstr(ModulRs("pageid"))=Cstr(strPid) then Response.Write " selected " %>
                ><%=ModulRs("modulnavn")%></option>
              <%
                Modulrs.Movenext
              loop
            Else
            %>
                <option selected value="0">Ingen - skal være hovedmenu</option>
            <%
            End if
            %>
          </select>
      </td>
    </tr>
Avatar billede eagleeye Praktikant
23. februar 2005 - 19:22 #10
Kan du uddybe:  men virker ikke helt optimalt  ?
Avatar billede babyworm Nybegynder
23. februar 2005 - 19:22 #11
Når der ikke er noget modul tilknyttet står der kontaktformular som er et modul.
Avatar billede babyworm Nybegynder
23. februar 2005 - 19:23 #12
Det virker når der er et modul tilknyttet f.eks. sitemap.. så virker det.. bortset fra at der ikke er muligheden for at vælge INGEN
Avatar billede eagleeye Praktikant
23. februar 2005 - 19:23 #13
man kan lave det sådan at "Ingen" altid er i listen sådan her:


    <tr>
      <td style="text-align:right;">Modul:</td>
      <td><select name="select" class="medium">
          <option selected value="0">Ingen - skal være hovedmenu</option>
            <%
            strModulSQL = "SELECT modul_bind.id,modul_bind.pageid,modul_bind.modulid,modul.id,modul.modulnavn FROM modul,modul_bind WHERE modul_bind.modulid=modul.id"
            Set ModulRs = connection.Execute(strModulSQL)
              Do While Not (ModulRs.EOF or ModulRs.BOF)
              %>
                <option value="<%=ModulRs("id")%>"
              <% if Cstr(ModulRs("pageid"))=Cstr(strPid) then Response.Write " selected " %>
                ><%=ModulRs("modulnavn")%></option>
              <%
                Modulrs.Movenext
              loop
            %>
          </select>
      </td>
    </tr>
Avatar billede babyworm Nybegynder
23. februar 2005 - 19:25 #14
Så virker det sku... :D
Avatar billede babyworm Nybegynder
24. februar 2005 - 09:05 #15
Jeg har lige opdaget at det ikke virker.. det er det forkerte den spytter ud i min select... Det den gør.. Den tager alt hvad der står i modul_bind og sætter ind.. dvs at hvis der er to sider der har en kontaktformular med id 1 indsat.. så vil kontaktformular stå der to gange... Det var ikke det den skulle.. den skulle tage de moduler fra modul og liste... samtidig med den selected hvis der i modul_bind stod at for den pid som man var inde på, at der var et modulid tilknyttet
Avatar billede eagleeye Praktikant
24. februar 2005 - 17:59 #16
Jeg tror ikke helt jeg forstår hvad du mener, skal den ikke liste alle moduler?

hvis man sætter distinct ind så skulle den kun tage det med en gang.

strModulSQL = "SELECT distinct modul_bind.pageid,modul.id,modul.modulnavn FROM modul,modul_bind WHERE modul_bind.modulid=modul.id"
Avatar billede babyworm Nybegynder
25. februar 2005 - 08:32 #17
Det virker stadig ikke...

Den skriver det sådan her:

          <option selected value="0">Intet modul tilknyttet</option>
           
                <option value="3"
             
                >Sitemap</option>
             
                <option value="1"
             
                >Kontaktformular</option>
             
                <option value="1"
             
                >Kontaktformular</option>
             
                <option value="2"
             
                >Nyhedsoversigt</option>
             
          </select>


Som du kan se tager den kontaktformular to gange, og det er fordi der i modul_bind står at kontaktformularen skal være på to sider...
Avatar billede eagleeye Praktikant
25. februar 2005 - 15:06 #18
Og det er med SQL sætningen som jeg har vist sidst?

Hvis ja så det nok ikke modul_bind.pageid men modul_bind.modulid i stedet for den skal tage med ud?

Det der gemmes i value er modul.id men if sætningen tjekker på modul_bind.pageid og sætter den selected som er lig pageid er det så rigtigt?
Avatar billede babyworm Nybegynder
25. februar 2005 - 15:10 #19
<select name="modul" class="medium">
          <option selected value="0">Intet modul tilknyttet</option>
            <%
            strModulSQL = "SELECT distinct modul_bind.pageid,modul.id,modul.modulnavn,modul_bind.modulid FROM modul,modul_bind WHERE modul_bind.modulid=modul.id"
            Set ModulRs = connection.Execute(strModulSQL)
              Do While Not (ModulRs.EOF or ModulRs.BOF)
              %>
                <option value="<%=ModulRs("id")%>"
              <% if Cstr(ModulRs("modulid"))=Cstr(strPid) then Response.Write " selected " %>
                ><%=ModulRs("modulnavn")%></option>
              <%
                Modulrs.Movenext
              loop
            %>
          </select>


Det virker stadig ik ?
Avatar billede eagleeye Praktikant
25. februar 2005 - 15:13 #20
Så skal SQL sætningen også laves om så pageid ikke er med, men du ved hvad de forskellig kolonner indeholder så er pageid et autonummer eller en reference til en anden tabel?


            strModulSQL = "SELECT distinct modul.id,modul.modulnavn,modul_bind.modulid FROM modul,modul_bind WHERE modul_bind.modulid=modul.id"
Avatar billede babyworm Nybegynder
25. februar 2005 - 23:28 #21
pageid er en reference til page.id
Avatar billede eagleeye Praktikant
26. februar 2005 - 00:01 #22
tager den stadig posten med 2 gange?

Der hvor de to moduler er ens er pageid forskellig?

Og hvad er det variablen strPid indeholder?
Avatar billede babyworm Nybegynder
26. februar 2005 - 11:05 #23
ja.... pageid er forskellige men modulid er ens...

strPid indeholder id'et på den side man redigerer...
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