PDA

View Full Version : سوال: جستجوی چند کلمه در یک کوئری!؟



moslem.hady
یک شنبه 30 مرداد 1390, 13:15 عصر
سلام دوستان. خسته نباشید.
من تو سایت جستجو کردم اما مطلبی مرتبط با سوالم پیدا نکردم.

فرض کنید این کلمه جستجو شده: "آموزش ASP"
من میخوام تمام رکوردهایی که توی Titleشون یا "آموزش" یا "ASP" دارن رو کوئری بگیرم.
میخواستم از یه تابع Split استفاده کنم مثل این:
where title like N'%'+(select item from FnSplit('آموزش#ASP','#'))+'%' اما نمیشه.
کسی اگه ایده ای داره ممنون میشیم بگه :-)
موفق باشید

MiladSe7en
یک شنبه 30 مرداد 1390, 13:19 عصر
سلام

Select * from tblSearch Where Title like N %'آموزش'% or Tiltle Like N%'ASP'%

moslem.hady
یک شنبه 30 مرداد 1390, 13:26 عصر
مرسی دوست عزیز. اینو خودم میدونم. اون "کلمه جستجو شده" به صورت پارامتر وارد کوئری میشه.
ینی معلوم نیست چیه و چندتا کلمه است. ممکنه این باشه: " آموزش ASP.net به روش ساده در visual studio"

MiladSe7en
یک شنبه 30 مرداد 1390, 13:29 عصر
آهان، خوب توضیح میدادی :لبخندساده:

شما باید کوئری رو Generate کنی، مثال:

string Query = "select * from tblSearch where ";
protected void Button1_Click(object sender, EventArgs e)
{
Query += " Title Like N%"+ txtSearch.Text +"%";
}
* بعد Query رو Execute کن

moslem.hady
یک شنبه 30 مرداد 1390, 15:40 عصر
سلام. دوستان من این کار رو کردم. این SP:

create PROCEDURE search
@KeyWord nvarchar(Max)
AS
BEGIN
DECLARE @ID bigint;
DECLARE @key nvarchar(2000);
DECLARE @tbl table(ID bigint);


DECLARE cr cursor
local
Dynamic
for
select item from FnSplit(@KeyWord,'#')
open cr
FETCH NEXT FROM cr into @key
WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @ID= ID
FROM table1 where title like N'%'+@key+'%'

insert into @tbl values(@id)

Fetch next from cr into @key

end
close cr
Deallocate cr

SELECT * FROM table1 where ID in(select id from @tbl)

END

اینم تابع FnSplit:
create FUNCTION [dbo].[FnSplit](
@sInputList nVARCHAR(max) -- List of delimited items
, @sDelimiter nVARCHAR(10) = '#' -- delimiter that separates items
) RETURNS @List TABLE (item nVARCHAR(max))
BEGIN
DECLARE @sItem nVARCHAR(max)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
BEGIN
SELECT
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARIND EX(@sDelimiter,@sInputList,0)-1))),
@sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHAR INDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter), LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END

حالا تنها مشکل اینه:
title like N'%'+@key+'%'
نمیدونم چرا کار نمیکنه. هرچی گشتم همه همینو میگم.
در مورد key@ هم مطمئنم که مقدار درسته.
برای مثال اگه بدم
set @key='ali'
درست کار نمیکنه. اما اگه همون شرط رو اینطوری بنویسم:
title like N'%ali%'
درست کار میکنه.
نظر؟!!
مرسی