Я пытаюсь создать бизнес-каталог, в котором я использую следующий запрос, чтобы извлекать данные из двух таблиц, содержащих информацию о бизнесе.TSQL-запрос для фильтрации каталога
select *
from BND_Listing
left join BND_ListingCategories on BND_Listing.CatID = BND_ListingCategories.CatID
order by Company asc
У меня есть форма, которая имеет 3 выпадающие Я использую для фильтрации выше запрос с помощью «фильтров», которые на самом деле являются только компоненты, которые мне нужно добавить в мой запрос выше, который будет слушать строки запроса значения, передаваемые в по форме.
При отправке моей формы я перенаправляю обратно на тот же URL-адрес, но добавляю следующее в своем URL-адресе на основе значений, выбранных из 3 раскрывающихся полей.
filter-Category=[Category]&filter-City=[City]&filter-State=[State]
У меня это работает правильно, но у меня возникают трудности, когда значение не передается в мой URL. Это происходит, когда пользователь фильтрует только один из трех возможных полей. Чтобы исправить это, я думаю, что могу создать значение «Все», которое будет похоже на filter-State = ALL
Как я могу обновить свой запрос, чтобы извлекать данные для прослушивания этих фильтров в строке запроса?
Любое понимание, примеры действительно оценены.
Надеюсь, что у меня есть смысл. Я все еще новичок в программировании.
Следующий запрос возвращает 0 результатов, пока не будут установлены все фильтры. Если установлен только один фильтр, он разбил мое приложение.
select *
from BND_Listing
where
(Category = '[querystring:filter-Category]'
or '[querystring:filter-Category]'='All')
and
(City = '[querystring:filter-City]'
or '[querystring:filter-City]'='All')
and
(State = '[querystring:filter-State]'
or '[querystring:filter-State]'='All')
UPDATE:
Спасибо за все входные каждый.
Я пробовал этот упрощенный запрос в SQL Server Management Studio для тестирования.
SELECT *
FROM BND_listing
WHERE city = IsNull('Trinity', city)
Он не возвращает никаких результатов, даже если «Троица», на самом деле город в одном из моих записей в таблице BND_Listing
.
Я понимаю, что ВСЕ добавит больше фильтров, но этот базовый запрос все еще не тянет что-нибудь?
UPDATE 2:
На странице загрузки, где я не нажал кнопку сортировки и нет никаких строковых значений запроса прошло еще. Если я хочу, чтобы моя сетка загружала ВСЕ записи таблицы, я должен использовать команду UNION для моего основного запроса.
select *
from BND_Listing
Плюс более сложный запрос, используемый для фильтрации результатов? До сих пор все примеры запросов нигде не попадали из моей сетки из-за инструкции WHERE.
Спасибо Тим, я просто прочитал немного о COALESCE, чтобы понять. Итак, в вашем примере (...) я бы просто продолжал работу с COALESCE и включал все фильтры? – UserSN