Я пытаюсь создать бесплатный брачный сайт, где домашняя страница содержит простую форму с некоторыми текстовыми полями & выпадающих списков и кнопку для поиска.Как сделать расширенный поисковый запрос?
При нажатии на него пользователь переходит на другую страницу вместе с строками запросов всех полей.
Я использовал следующую хранимую процедуру, чтобы показать результат поиска. Параметры:
cmd.Parameters.AddWithValue("@cat", cat);
cmd.Parameters.AddWithValue("@subcat", subcat == "-1" ? "-1" : "," + subcat);
cmd.Parameters.AddWithValue("@state", state);
cmd.Parameters.AddWithValue("@city", city == "-1" ? "-1" : "," + city);
ALTER PROCEDURE [dbo].[SearchGetAdPageWise]
,@cat INT
,@subcat NVARCHAR(10)
,@state INT
,@city NVARCHAR(10)
AS
BEGIN
SET NOCOUNT ON;
SELECT ROW_NUMBER() OVER
(
ORDER BY a.ad_type ASC,NEWID()
)AS RowNumber
,a.Id
,a.ad_title
,b.Name a_state
,a.ad_brief
,a.ad_pic
INTO #Results
FROM [tbl_ads] a LEFT JOIN tbl_state b ON a.ad_state=b.Id
WHERE ([email protected] OR a.ad_cat='-1' OR a.ad_cat='')
AND ((a.ad_subcat LIKE N'%'[email protected]+'%' OR a.ad_subcat LIKE N'%'[email protected]) OR a.ad_subcat='-1' OR a.ad_subcat='')
AND ([email protected] OR a.ad_state='-1' OR a.ad_state='')
AND ((a.ad_city LIKE N'%'[email protected]+'%' OR a.ad_city LIKE N'%'[email protected]) OR a.ad_city='-1' OR a.ad_city='')
Проблема я застрял с ИЛИ & И
, если я использую OR, то он будет показывать много неактуальной результата.
если я использую И что тогда, если какой-либо из поискового запроса пуст.
Извините, что я новичок в этом вопросе, и мой вопрос может быть слишком ребяческим для вас.
Другой вопрос, если это лучший & безопасный способ сделать это? если нет, то как я могу его улучшить.
Похоже, запятых может вызвать проблемы, те, в параметрах: «» + подкатегория , Я бы предположил, что это должен быть только субкат, так как вы сравниваете его с содержимым столбца ad_subcat. –
@Mike Используйте значения по умолчанию в своей таблице, где это необходимо. – WorkSmarter
{a.ad_subcat LIKE N '%' + @ subcat + '%' ИЛИ a.ad_subcat LIKE N '%' + @ subcat} - вторая часть здесь не нужна, то, что она ищет, должна быть поднята первой частью – bf2020