Справка SQL с опцией выбора - PullRequest
0 голосов
/ 06 мая 2011

Пожалуйста, дайте мне знать, если я смогу облегчить понимание вопросов, как я мог бы действительно с помощью ...

У нас есть каталог с категориями и псевдонимами, и я пытаюсь добавитьвозможность создавать псевдонимы подкатегорий , которые входят в категории верхнего уровня , где в настоящее время мы можем только добавлять подкатегории псевдонимов в другие подкатегории, а это не то, что нам нужно.

Например, , я бы хотел добавить подкатегорию «Агенты по недвижимости» в обе основные категории «Дом и сад» и «Финансы и ипотека».'.

Я могу добавить ' Агенты по недвижимости ', однако, к любой из подкатегорий, поэтому хотел бы включить категории верхнего уровня в раскрывающийся список выбора.наряду с подкатегориями.Надеюсь, что это имеет смысл!

Код размещен ниже и состоит из 2 отдельных файлов для обработки данных. В настоящее время он запрашивает PGID, который является GID родительского каталога - то есть категория верхнего уровня.

Мы хотим, чтобы в раскрывающемся списке выбора псевдонимов отображались не только подкатегории (GID), относящиеся к категориям верхнего уровня родительских категорий (PGID), но и PGID.сами по себе categoires верхнего уровня.

Например, опция выбора состоит из всех категорий уровней, таких как:

  • Дом и сад (PGID)
  • Агенты по недвижимости (GID)
  • Поставщики мебели (GID)
  • Садовые центры (GID) и т. Д.

Не только:

  • Агенты по недвижимости (GID)
  • Поставщики мебели (GID)
  • Садовые центры (GID)

Пожалуйста, дайте мне знать, если я могу уточнить, как этопросто, но сложно объяснить!

AddAlias.asp

<!--#include virtual="/Admin/FranchiseAdmin/DirectorySetup/Aliases/i_Alias.asp"-->
 <%
  objConn.Open strConn
 %>
 <input type="hidden" **name="PGID" value="<% = Request("PGID") %>"** />
  <select>
  <%
  SQLCommand = "SELECT * FROM Directories WHERE GID='" & CleanSQLText(Request("PGID")) & "'"
  rsTemp.Open SQLCommand, objConn, adOpenStatic, adLockReadOnly
  if rsTemp.RecordCount <> 1 then
  FailSystemEvent "AddAlias:  Failed to load Existing Parent"
  Else
  %>
  <option value="<% = rsTemp("GID") %>"><% = rsTemp("DirectoryName") %></option><%
  End if
  rsTemp.Close
  SQLCommand = "SELECT * FROM Directories WHERE ParentDirectoryGID IS NOT NULL AND GID <> '" & CleanSQLText(Request("PGID")) & "' ORDER BY DirectoryName"
  rsTemp.Open SQLCommand, objConn, adOpenStatic, adLockReadOnly
  While Not rsTemp.EOF
  CreateSelectOption rsTemp("GID"), rsTemp("DirectoryName"), CleanSQLText(Request("PGID"))
  rsTemp.MoveNext
  Wend
  rsTemp.Close
  %>
  </select>
 <%
 objConn.Close
 %>

I rВ приведенном выше коде ParentDirectoryGID IS NOT NULL показано следующее, где теперь я могу видеть категории верхнего уровня, но не могу сохранить из-за ошибки

Ошибка генерируется из файла включения i_Alias.asp и говорит: Произошла ошибка.GID каталога недействителен

Вот код включаемого файла: i_Alias.asp

<%

Dim SQLCommand : SQLCommand = ""
Dim SQLFilter : SQLFilter = ""
Dim objConn : Set objConn = Server.CreateObject("ADODB.Connection")
Dim rsAlias : Set rsAlias = Server.CreateObject("ADODB.RecordSet")
Dim rsTemp : Set rsTemp = Server.CreateObject("ADODB.RecordSet")
Dim strUserError : strUserError = ""

Dim strFranchiseGID
Dim strDirectoryGID

Dim objEditor

Select Case Request.Form("Action")
    Case "AddNew"

        'strFranchiseGID = CleanSQLData(Request.Form("strFranchiseGID"))
        'If strFranchiseGID = "" then strFranchiseGID = Null
        strFranchiseGID = Session("AdminFranchiseGID")

        strDirectoryGID = CleanSQLData(Request.Form("PGID"))
        If strDirectoryGID = "" then 
            strUserError = strUserError & "An error has occured.  The Directory GID is invalid"
        end if

        if strUserError = "" then
            objConn.Open strConn
            SQLCommand = "SELECT TOP 1 * FROM DirectoryAliases"
            rsAlias.Open SQLCommand, objConn, adOpenKeySet, adLockOptimistic
            rsAlias.AddNew
            rsAlias("FranchiseGID") = strFranchiseGID
            rsAlias("DirectoryGID") = strDirectoryGID
            rsAlias.Update
            rsAlias.Close
            objConn.Close
            'Response.Redirect "Default.asp?PGID=" & Request("PGID")
            ' Redirect to the New Parent Folders
            Response.Redirect "Default.asp?PGID=" & strDirectoryGID
        End if
    Case "Update"
        if Not Session("Role_Franchise_ManageDirectory") = True then
            AccessDenied
        End if
        objConn.Open strConn
        SQLCommand = "SELECT * FROM DirectoryAliases WHERE GID = '" & CleanSQLData(Request.Form("GID")) & "'"
        rsAlias.Open SQLCommand, objConn, adOpenKeySet, adLockOptimistic
        if rsAlias.RecordCount <> 1 then
            FailSystemEvent "EditAlias Update failed - could not load unique record"
            rsAlias.Close
            objConn.Close
            Response.End
        End if
        'strFranchiseGID = CleanSQLData(Request.Form("strFranchiseGID"))
        'If strFranchiseGID = "" then strFranchiseGID = Null
        strFranchiseGID = Session("AdminFranchiseGID")
        rsAlias("FranchiseGID") = strFranchiseGID

        strDirectoryGID = CleanSQLData(Request.Form("PGID"))
        If strDirectoryGID = "" then 
            strUserError = strUserError & "An error occured.  The Directory GID is invalid"
        else
            rsAlias("DirectoryGID") = strDirectoryGID
        End if
        rsAlias.Update
        rsAlias.Close
        objConn.Close
        if strUserError = "" then
            Response.Redirect "Default.asp?PGID=" & Request("PGID")
        end if
    Case "Delete"
        if Not Session("Role_Franchise_ManageDirectory") = True then
            AccessDenied
        End if
        SQLCommand = "DELETE DirectoryAliases WHERE GID = '" & CleanSQLText(Request.Form("GID")) & "'"
        objConn.Open strConn
        objConn.Execute SQLCommand
        objConn.Close
End Select
%>

Надеюсь, кто-то может помочь!

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Не могли бы вы описать структуру таблицы немного подробнее?

Похоже, что это родительские дочерние отношения Итак: Таблица каталогов имеет первичный ключ GID, имеет внешний ключ ParentDirectoryGID для directory.GID

Пример данных:

  • GID 9 - Дом и сад (GID) ParentDirectoryGID = NULL
  • GID 10 - Агенты по недвижимости (GID) ParentDirectoryGID = 9
  • GID 11 -Поставщики мебели (GID) ParentDirectoryGID = 9
  • GID 12 - Садовые центры (GID) и т. Д. ParentDirectoryGID = 9

То, что вы хотите сделать, это заполнить раскрывающийся список, состоящий изродитель и все его потомки (как насчет детей детей?)

Если все верно, вы можете захотеть взглянуть на иерархические запросы в oracle Connect By Prior (но я не знаю, какой движок базы данных вы используете)

0 голосов
/ 06 мая 2011

Я не уверен, что полностью понимаю ваш вопрос, но не могли бы вы сделать это с UNION, т. Е.

, при условии, что у вас есть таблица A с столбцами desc и PGID и таблица B с cols desc, GIDи PGID

select * from
(
select desc, GID as X from A
union all
select desc, PGID as X from B
) both_tables_unioned
order by X, desc

, поэтому, если Таблица A содержит:

desc     GID
----     ---
A        1
B        2

, а B содержит:

desc     PGID
----     ----
AA       1
AB       1
BA       2
BB       2

, вы должны получить

A       1 
AA      1 
AB      1 
B       1 
BA      1 
BB      1

в результате

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...