我正在尝试建立一个免费的婚姻网站,其中主页包含一个带有一些文本框的简单形式。下拉菜单和搜索按钮。
点击后,它会将访问者带到另一个页面以及所有字段的查询字符串。
我使用以下存储过程来显示搜索结果。 参数:
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 (a.ad_cat=@cat OR a.ad_cat='-1' OR a.ad_cat='')
AND ((a.ad_subcat LIKE N'%'+@subcat+'%' OR a.ad_subcat LIKE N'%'+@subcat) OR a.ad_subcat='-1' OR a.ad_subcat='')
AND (a.ad_state=@state OR a.ad_state='-1' OR a.ad_state='')
AND ((a.ad_city LIKE N'%'+@city+'%' OR a.ad_city LIKE N'%'+@city) OR a.ad_city='-1' OR a.ad_city='')
问题是我被OR&和
如果我使用OR,那么它将显示许多不相关的结果。
如果我使用AND那么如果任何搜索查询为空则该怎么办。
对不起,我是新手,对我的朋友来说,我的问题可能太幼稚了。
另一个问题,如果它是最好的&安全的方式这样做?如果没有,那么我该如何改进呢。
答案 0 :(得分:0)
我不知道您需要过滤哪些数据,但我认为您可以尝试在以下内容中使用...OR @var = ''
:
WHERE (a.ad_cat=@cat OR a.ad_cat='-1' OR a.ad_cat='')
AND ((a.ad_subcat LIKE N'%'+@subcat+'%' OR a.ad_subcat LIKE N'%'+@subcat) OR a.ad_subcat='-1' OR @subcat='')
AND (a.ad_state=@state OR a.ad_state='-1' OR @state='')
AND ((a.ad_city LIKE N'%'+@city+'%' OR a.ad_city LIKE N'%'+@city) OR a.ad_city='-1' OR @city='')
答案 1 :(得分: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