View Full Version : تفكيك عبارت جستجو شده
pedram_ns
شنبه 14 فروردین 1389, 16:47 عصر
سلام
يك فيلد جستجو دارم كه مي خوام اگه كاربر دو كلمه رو مثلا "كتاب داستان" رو تايپ كرد دو كلمه رو تفكيك كنم و بر اساس هر دو كلمه جستجو كنم در جايي به من كمك كردن تا به اينجا رسيدم كه:
در كدهام فيلد رو تفكيك مي كنم:
p = Replace(pp, " ", "'%' or search like '%'")
و اين هم كد جستجومه:
Dim selectsql As String = "SELECT [ID], [company], [managment], [search] FROM [company] WHERE search LIKE '%'+ ? +'%'"
Dim cmd As New OleDbCommand(selectsql, con)
cmd.Parameters.AddWithValue("search", p)
ولي متاسفانه كار نمي كنه اگر كسي از دوستان با اين روش آشنايي داره لطفا اشكال كدم رو بده با اين كدتك كلمات رو سرچ مي كنه ولي با دو كلمه چيزي پيدا نمي كنه؟؟؟؟؟؟؟
saied_genius
شنبه 14 فروردین 1389, 17:51 عصر
سلام
به نظر من از syntax زير استفاده کنيد بهتر است (و اصولي تر):
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)براي متن جستجو هم ، کلمات را به يک رشته که کلمات با "،" جدا شده اند تبديل کنيد و به جاي مقادير داخل پرانتز قرار دهيد.
موفق باشيد.
pedram_ns
شنبه 14 فروردین 1389, 19:04 عصر
خيلي ببخشيد ولي اين value1 و value2 از كجا اومدن مي شه توضيح بيشتري بدين؟
saied_genius
شنبه 14 فروردین 1389, 19:26 عصر
مثال:
متن جستجو: کتاب داستان
نمونه:
SELECT [ID], [company], [managment], [search]
FROM [company]
WHERE search IN ('کتاب','داستان')موفق باشيد.
exlord
شنبه 14 فروردین 1389, 20:23 عصر
where search like '%کتاب%' or search like '%داستان%'
saied_genius
شنبه 14 فروردین 1389, 20:26 عصر
where search like '%کتاب%' or search like '%داستان%'
اين روش براي حالتي است که تعداد کلمات ثابت است ، ولي استفاده از where in براي حالتي است که تعداد کلمات ورودي مشخص نيست.
موفق باشيد.
iman_ad
شنبه 14 فروردین 1389, 21:36 عصر
اگه محدودیت هاست نداری از full index search استفاده کن، ولی باید سرویسش روی sql اکتیو باشه
pedram_ns
یک شنبه 15 فروردین 1389, 14:27 عصر
مثال:
متن جستجو: کتاب داستان
نمونه:
SELECT [ID], [company], [managment], [search]
FROM [company]
WHERE search IN ('کتاب','داستان')موفق باشيد.
خوب بله ولي من با يك فيلد عبارت جستجو شده رو مي خونم چطور اگه چند كلمه وارد شد از هم جداشون كنم و از كجا بدون كاربر سه تا كلمه وارد نمي كنه؟
exlord
یک شنبه 15 فروردین 1389, 15:42 عصر
string fields = "";
string[] search = textBox1.Text.Split(' ');
foreach (string item in search)
{
fields += "'" + item + "' , ";
}
fields = fields.Substring(0, fields.Length - 2);
string query = String.Format("SELECT [ID], [company], [managment], [search] FROM [company] WHERE search IN ({0})",fields);
bpzone
یک شنبه 15 فروردین 1389, 17:27 عصر
با سلام دوست عزیز
من کد تفکیک کردن یک متن رو برات گذاشتم
تمیدارم که کارت راه بیفته
static void Main(string[] args)
{
string[] list = new string[10];
string str;
str = Console.ReadLine();
list = str.Split(' ');
Console.WriteLine();
Console.WriteLine();
for (int i = 0; i < list.Length; i++)
Console.WriteLine(list[i]);
Console.ReadKey();
}
pedram_ns
یک شنبه 15 فروردین 1389, 17:34 عصر
string fields = "";
string[] search = textBox1.Text.Split(' ');
foreach (string item in search)
{
fields += "'" + item + "' , ";
}
fields = fields.Substring(0, fields.Length - 2);
string query = String.Format("SELECT [ID], [company], [managment], [search] FROM [company] WHERE search IN ({0})",fields);
خيلي ممنونم
ولي من با vb اشنايي دارم و از كد شما سر در نميآرم مي شه اين كد رو به vb برام بنويسيد.
لطفا دريغ نكنيد.
saied_genius
یک شنبه 15 فروردین 1389, 18:58 عصر
خيلي ممنونم
ولي من با vb اشنايي دارم و از كد شما سر در نميآرم مي شه اين كد رو به vb برام بنويسيد.
لطفا دريغ نكنيد.
هر چند سوالتان را در بخش C# مطرح کرده ايد ، ولي ما هم دريغ نکرديم ، اين هم کد تبديل شده به VB.Net .
البته اينکه خروجي هماني باشد که مد نظر شما است را نمي دانم ، ولي کد زير دقيقاً همان کد است که به VB.Net تبديل شده است.
Dim fields As String = ""
Dim search As String()
search = TextBox1.Text.Split(" ")
For Each item As String In search
fields += "'" + item + "' , "
Next
fields = fields.Substring(0, fields.Length - 2)
Dim query As String = String.Format("SELECT [ID], [company], [managment], [search] FROM [company] WHERE search IN ({0})", fields)
موفق باشيد.
pedram_ns
دوشنبه 16 فروردین 1389, 09:14 صبح
منون كه وقت مي ذارين و پاسخ مي ديدن من كد هام رو با كد شما اصلاح كردم و در زير گذاشتم.
1.يك مشكل داره كه فقط دو نتيجه رو بر مي گردونه نه بيشتر.
2.اين جستجوي دقيق انجام مي ده ولي لازمه كه جستجو غير دقيق باشه براي اون بايد چكار كرد؟
Dim fields As String = ""
Dim search As String()
search = search1.Text.Split(" ")
For Each item As String In search
fields += "'" + item + "' , "
Next
fields = fields.Substring(0, fields.Length - 2)
Label1.Text = fields
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|database.mdb")
Dim selectsql As String = String.Format("SELECT [ID], [company], [managment], [search] FROM [company] WHERE search IN ({0})", fields)
Dim cmd As New OleDbCommand(selectsql, con)
cmd.Parameters.AddWithValue("search", fields)
con.Open()
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "company")
Dim count As String
count = ds.Tables("company").Rows.Count
ListView1.DataSource = ds
ListView1.DataBind()
con.Close()
exlord
دوشنبه 16 فروردین 1389, 09:30 صبح
منون كه وقت مي ذارين و پاسخ مي ديدن من كد هام رو با كد شما اصلاح كردم و در زير گذاشتم.
1.يك مشكل داره كه فقط دو نتيجه رو بر مي گردونه نه بيشتر.
2.اين جستجوي دقيق انجام مي ده ولي لازمه كه جستجو غير دقيق باشه براي اون بايد چكار كرد؟
where search like '%کتاب%' or search like '%داستان%'
pedram_ns
دوشنبه 16 فروردین 1389, 14:50 عصر
باز هم ممنون
من كد هام رو به صورت جستجوي غير دقيق تغيير دادم:
Dim fields AsString = ""
Dim search AsString()
search = search1.Text.Split(" ")
ForEach item AsStringIn search
fields += "'%" + item + "%' or search like "
Next
fields = fields.Substring(0, fields.Length - 2)
Label1.Text = fields
Dim con AsNew OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|database.mdb")
Dim selectsql AsString = String.Format("SELECT [ID], [company], [managment], [search] FROM [company] WHERE search Like {0}", fields)
اما متاسفانه خروجي اين روش كد زيره:
<H2>'search Like '%p%' or search like '%h%' or search lik
</H2>
همون طور كه مي بينيد عبارت or search like در آخر زيادي مياد.
لطفا بگين چه تغييري بايد بدم كه اين مشكل اخر حل بشه؟؟
pedram_ns
دوشنبه 16 فروردین 1389, 23:05 عصر
لطفا راهنمايي بفرماييد.
exlord
سه شنبه 17 فروردین 1389, 12:18 عصر
fields = fields.Substring(0, fields.Length - 15)
pedram_ns
سه شنبه 17 فروردین 1389, 16:15 عصر
دوست گرامي به شدت سپاس گذارم كه با صبر و بزرگواري مشكلم رو حل كرديد كل كد رو گذاشتم اميدوارم به كار ديگران هم بياد.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fields As String = ""
Dim search As String()
search = search1.Text.Split(" ")
For Each item As String In search
fields += "'%" + item + "%' or search like "
Next
fields = fields.Substring(0, fields.Length - 15)
Label1.Text = fields
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|database.mdb")
Dim selectsql As String = String.Format("SELECT [ID], [company], [managment], [search] FROM [company] WHERE search Like {0}", fields)
Dim cmd As New OleDbCommand(selectsql, con)
cmd.Parameters.AddWithValue("search", fields)
con.Open()
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "company")
Dim count As String
count = ds.Tables("company").Rows.Count
ListView1.DataSource = ds
ListView1.DataBind()
con.Close()
End Sub
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.