23. februar 2005 - 18:28Der 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
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")
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
<% 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 %>
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
<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>
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>
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
<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>
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"
ja.... pageid er forskellige men modulid er ens...
strPid indeholder id'et på den side man redigerer...
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.