PDA

View Full Version : مشکل در کوئری LIKE ؟



پیام حیاتی
پنج شنبه 27 شهریور 1393, 16:39 عصر
سلام
من می خوام از بین دو جدول اطلاعات رو بر اساس نام و یا نام خانوادگی که کاربر وارد میکنه به نمایش در بیارم ، این کوئری من :

string commandText = "SELECT * FROM omomi WHERE fullname LIKE '%" + TextBox1.Text + "%' UNION SELECT * FROM DANDAN WHERE fullname LIKE '%" + TextBox1.Text + "%' ";

مشکل اینجاست که وقتی فامیلی رو به تنهایی وارد کنیم برخی مواقع جستجو انجام میشه برخی مواقع هم خیر.
مثلا" نام و نام خانوادگی : علی ساکت ، من هر کدوم رو تنها بزنم جستجو میشه اما نام و نام خانوادگی : سید محمد شهاب جزایری ، سید و جزایری رو بنویسم پیدا نمیکنه ، محمد و شهاب رو تایپ کنم پیداش میکنه!!!جزا هم بنویسم پیدا میکنه.

چه کارش کنم :ناراحت:

تشکر

mohammad reza beizavi
پنج شنبه 27 شهریور 1393, 20:05 عصر
درود بر شما
ببینید با یونیکدهای حرفهای "ی" , "ک" بین عربی و فارسی مشکل ندارید. برای اینکار هم با عبارتهایی که شامل این دوتا حرف نیستن آزمایش کن و بعد با کلماتی که شامی این دو حرفند.
البته اگه درست بخواید این مورد رو چک کنید باید تمام حروف ی و ک رو به یه نوع؛ حالا یا فارسی و یا عربی تبدیل کنید.
در هر صورت از چه دیتابیسی استفاده می کنید رو هم بنویسید.

پیام حیاتی
پنج شنبه 27 شهریور 1393, 20:50 عصر
درود بر شما
ببینید با یونیکدهای حرفهای "ی" , "ک" بین عربی و فارسی مشکل ندارید. برای اینکار هم با عبارتهایی که شامل این دوتا حرف نیستن آزمایش کن و بعد با کلماتی که شامی این دو حرفند.
البته اگه درست بخواید این مورد رو چک کنید باید تمام حروف ی و ک رو به یه نوع؛ حالا یا فارسی و یا عربی تبدیل کنید.
در هر صورت از چه دیتابیسی استفاده می کنید رو هم بنویسید.
از sql استفاده می کنم ، با ک مشکلی نیست ی دردسر ساز شده.

پیام حیاتی
پنج شنبه 27 شهریور 1393, 20:57 عصر
از صبح هر چی گشتم چیز بدرد بخوری پیدا نکردم ، دیگه الآن زنگ زدم یکی از اساتید گفت 20 تومن میگیرم یادت میدم،قبول کردم منتظر فایل PDF آموزشی هستم که واسم ایمیل کنه.
مرسی آقا محمد به خاطر پاسخ.

mohammad reza beizavi
پنج شنبه 27 شهریور 1393, 20:59 عصر
بهترین راه اینه که یا مقادیر رشته ای فیلدهایی که می خواید ثبت کنید رو اصلاح کنید و بعد ثبت بشند. منظور از اصلاح شدن هم اینه که به یه استاندارد ثابت دربیاریدشون مثلا همشون رو به ی عربی تبدیل کنید.
بعد وقتی که می خواید جستجو کنید هم مقداری رو که می خواید جستجو کنید ابتدا به همون استاندارد مثلا عربی تبدیل کنید و بعد به کوئری بدیدش.

برای تبدیل حروف ی و ک به عربی مثلا در جدول Persons و فیلد firstName از این شیوه میتونید استفاده کنید:


UPDATE Persons
SET
Persons.firstName=REPLACE(REPLACE(firstName,nchar( 1740),nchar(1610)),nchar(1705),nchar(1603));

mohammad reza beizavi
پنج شنبه 27 شهریور 1393, 21:16 عصر
راستی کوئری رو هم به این تغییر بده:


string commandText = "SELECT * FROM omomi WHERE fullname LIKE N'%" + TextBox1.Text + "%' UNION SELECT * FROM DANDAN WHERE fullname LIKE N'%" + TextBox1.Text + "%' ";


البته مقدار داخل TextBox1 رو قبل از پاس دادن و با استفاده از کد زیر ی و ک رو به ی و ک عربی تبدیل کنید:


TextBox1.Text.Replace('ی','ي').Replace('ک','ك' );

پیام حیاتی
پنج شنبه 27 شهریور 1393, 21:47 عصر
راستی کوئری رو هم به این تغییر بده:


string commandText = "SELECT * FROM omomi WHERE fullname LIKE N'%" + TextBox1.Text + "%' UNION SELECT * FROM DANDAN WHERE fullname LIKE N'%" + TextBox1.Text + "%' ";

دمت گرم آقا درست شد ، داستان این N چی هست؟

mohammad reza beizavi
پنج شنبه 27 شهریور 1393, 21:49 عصر
این N رو قبل از مقدارهای ررشته ای و برای اینکه به engine بگیم که این رشته unicode هست میذاریم.