SQL: отображение опции ссылки с использованием условий - PullRequest
4 голосов
/ 05 мая 2011

Я пытаюсь сделать доступной опцию меню для пользователей в зависимости от условий, используя 2 таблицы.

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

Я бы хотел, чтобы опция «Добавить подкатегорию» отображалась в другой подкатегории только в том случае, если в нее не добавлено ни одной рекламы.

Например, во всех городских справочниках есть подкатегория «Бухгалтеры». Он заполнен рекламными объявлениями клиентов в каталоге «Brentwood», но не в каталоге «Shrewsbury».

Я хочу показать опцию «Добавить подкатегорию», только если выполнены следующие три условия с использованием данных из следующих таблиц и столбцов:

  • Таблица «Справочники»: Это должен быть текущий город франшизы (используя столбец «FranchiseGID»)
  • Таблица «Каталоги»: должна применяться к каждой отдельной подкатегории (столбец GID)
  • Таблица «Клиенты»: ни один клиент не зарегистрирован для включения в подкатегорию (столбец GID)

Таким образом, используя комбинацию этих столбцов таблицы, используя «iAdvertCount» в качестве счетчика и «ClientGID», чтобы проверить, есть ли рекламные подписки в этой конкретной подкатегории; также, что он применяется только к текущему сайту франшизы (FranchiseGID).

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

Вот как далеко я ушел с таблицей «Каталоги», но мне нужно добавить также условие GID клиента из «Клиентов»:

Dim iAdvertCount

SQLCommand = "SELECT COUNT(*) AS Counter FROM Directories WHERE GID is not null AND FranchiseGID is not null"
rsTemp.Open SQLCommand, objConn, adOpenStatic, adLockReadOnly
iSubscriptionCount = rsTemp("Counter")
rsTemp.Close
if iSubscriptionCount = 0 then
    %><a href="AddDirectory.asp?PGID=<% = rsDirectory("GID") %>"><% = GetIcon("Add", "Add Sub Directory", 25, True) %></a><%
end if

Пока я могу скрыть опцию «Добавить подкатегорию» в любом каталоге франшизы веб-сайта (например, Brentwood), который содержит ClientGID, но он применяется ко всем подкатегориям независимо от того, содержат ли они подписки / объявления клиента или нет.

Я надеюсь, что кто-то может помочь и действительно разобраться в том, что я написал, чтобы помочь каким-то образом, поскольку это очень поможет!

1 Ответ

0 голосов
/ 04 июля 2011

Я надеюсь, что это больше, чем общеизвестный выстрел в темноте

Я считаю, что вам нужно использовать оператор существующего.

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

Таким образом, ваш запрос может выглядеть следующим образом:

SELECT COUNT(*) AS Counter
  FROM Directories
 WHERE GID is not null
   AND FranchiseGID is not null
   AND NOT EXISTS(SELECT 'ARBITRARY VALUE'
                    FROM clients
                   WHERE clients.gid = directories.gid)

Оператор exist использует подзапрос , этопочему мы можем ссылаться на таблицу каталогов, даже если ее нет в предложении from подзапроса.Поэтому, если подзапрос возвращает что-либо, он не будет возвращен для подсчета функцией подсчета

Возможно, вам потребуется изменить условие where подзапроса, чтобы заставить его работать правильно, так как я не уверен, какваша база данных структурирована

...