2015-04-12 4 views
0

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

При нажатии на него пользователь переходит на другую страницу вместе с строками запросов всех полей.

Я использовал следующую хранимую процедуру, чтобы показать результат поиска. Параметры:

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, то он будет показывать много неактуальной результата.

если я использую И что тогда, если какой-либо из поискового запроса пуст.

Извините, что я новичок в этом вопросе, и мой вопрос может быть слишком ребяческим для вас.

Другой вопрос, если это лучший & безопасный способ сделать это? если нет, то как я могу его улучшить.

+0

Похоже, запятых может вызвать проблемы, те, в параметрах: «» + подкатегория , Я бы предположил, что это должен быть только субкат, так как вы сравниваете его с содержимым столбца ad_subcat. –

+0

@Mike Используйте значения по умолчанию в своей таблице, где это необходимо. – WorkSmarter

+0

{a.ad_subcat LIKE N '%' + @ subcat + '%' ИЛИ ​​a.ad_subcat LIKE N '%' + @ subcat} - вторая часть здесь не нужна, то, что она ищет, должна быть поднята первой частью – bf2020

ответ

0

Я не знаю, что именно данные вам нужно отфильтровать, но я думаю, что вы можете попробовать использовать ...OR @var = '' в следующем:

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 @subcat='') 
AND ([email protected] OR a.ad_state='-1' OR @state='') 
AND ((a.ad_city LIKE N'%'[email protected]+'%' OR a.ad_city LIKE N'%'[email protected]) OR a.ad_city='-1' OR @city='') 
+0

Это мое полное описание по этому вопросу [Дополнительная фильтрация] (http: //forums.asp .net/p/2044843/5892528.aspx? Расширенный + поиск + запрос) – Mike

0

Хорошо, я ищу логика может быть трудно. Если бы я был вами, я мог бы попробовать что-то вроде этого. Она всегда должна возвращать определенное количество результатов (в моем случае 10 строк), тем более релевантные результаты придут первые

SELECT TOP 10 * --or any number of rows 
FROM 
(
    SELECT TOP 10 *,1 AS result_order 
    FROM yourTable 
    WHERE 1=1 AND 2=2 

    UNION ALL 

    SELECT TOP 10 *,2 AS result_order 
    FROM yourTable 
    WHERE 1=1 OR 2=2 
) 
ORDER BY result_order 
+0

Это мое подробное описание по этому вопросу [Дополнительная фильтрация] (http://forums.asp.net/p/2044843/5892528.aspx?Advanced + Поиск + Запрос) – Mike

Смежные вопросы