View Full Version : جستجوی دقبق عدد در میان رشته
fahimi
پنج شنبه 21 شهریور 1392, 22:13 عصر
با سلام
من به دلایلی ای دی محصولات در یک فیلد به بصورت زیر ذخیره کرده ام
15;12;11;5
1;2;3;4
22;21;23
43;3;42;41
به بفرض بخواهیم دقیقا عدد 3 را پیدا کنیم از چه روشی استفاده کنم
دستور like نتایج مد نظر را بازیابی نکرد
lastmory
پنج شنبه 21 شهریور 1392, 22:20 عصر
با سلام
یکی از راههات اینه که به هر ردیف که میرسی اون ردیف رو اسپیلیت کنی با ; و عدد مورد نظرتو پیدا کنی
هم تو SQL میشه و هم سمت برنامه ت
و اینکه کلا اصول طراحی پایگاه داده رفته زیر سوال با این طرز ذخیره و کارت خیلی پیچیده تر میشه
محمد سلیم آبادی
جمعه 22 شهریور 1392, 10:39 صبح
دستور like نتایج مد نظر را بازیابی نکرد
باید قبل و بعد از رشته ای که شامل کدهاست کاراکتر ; قرار بدین. سپس موقع جستجو نیز قبل و بعد کدمورد نظر ; قرار بدین با این کار مشکلتون حل میشه.
tooraj_azizi_1035
جمعه 22 شهریور 1392, 11:52 صبح
باید اندیس عدد 3 رو در رشته با CHARINDEX بدست بیارید و مطئن شید که قبل و بعدش یا ; هست یا اینکه عددی غیر از 3 نیست یعنی قبل و بعدش نباید عدد باشه.
fahimi
شنبه 23 شهریور 1392, 11:41 صبح
با سلام
یکی از راههات اینه که به هر ردیف که میرسی اون ردیف رو اسپیلیت کنی با ; و عدد مورد نظرتو پیدا کنی
هم تو SQL میشه و هم سمت برنامه ت
و اینکه کلا اصول طراحی پایگاه داده رفته زیر سوال با این طرز ذخیره و کارت خیلی پیچیده تر میشه
با سلام در این مورد حق با شماست در تحلیل دچار سردگمی شده ام به شاید از ضعف علمی یا تجربه باشد.به هر حال مسئله را مطرح میکنم
برای مثال ما یک جدولی به نام CityInfo داریم که اطلاعات شهر ها شامل نژاد و محصولات کشاوزی را در آن ذخیره می کند که اطلاعات را از سه جدول اطلاعات پایه City نام شهر ها - race نژادها و product محصولات استخراج میشود .
برنامه به این صورت است که کاربر از طریق Combobox شهر را انتخاب می کند و از طریق دو CheckListBox از نژاد ها و محصولات بصورت مولتی انتخاب می کند.
به نظرمن دو سناریو برای طرحی وجود دارد
1-دو جدول مجزا برای ثبت نژادها و تولیدات ایجاد کنیم با تیبل Cityinfo بصورت و آن دو جدول بصورت Master Details رفتار کنیم
2-اطلاعات مربوطه را در یک فیلد بصورت اسپیلیت ذخیره کنیم
که من را دوم را انتخاب کردم متاسفانه همانطور نوشته اید در گزارشگیر ی به مشکل خوردم
خوشحا میشوم راهنمایی دوستان را داشته باشم
lastmory
شنبه 23 شهریور 1392, 13:49 عصر
با سلام مجدد
بهترین راهی که میتونم به شما پیشنهاد کنم اینه که تغییر روش بدید به سرعت ، یه جدول درست کنید که توش مشخص میشه چه شهری با چه نژادی و چه محصولی
و یه کوئری بنویسید که این دیتاهایی که تابحال ثبت شده رو ببره تو فیلدهای خودش ذخیره کنه ( البته این کوئری رو یه بار اجرا میکنی ) و از این به بعد دیگه کاربر هر چی زد زو میریزی توی همین جدول و خودتو از پیچیدگی های بعدی که خیلی بیشتر از اینهاست نجات میدی ، حالا اگه خواستی تو نوشتن این کوئری کمکت میکنم
موفق باشی
fahimi
شنبه 23 شهریور 1392, 16:20 عصر
با سلام
من نمونه دیتابیس را در Access پیاده کردم با یک نمونه کوئری ولی Sqlserver ظاهرا از multivalue پشتیبانی نمی کند.
می شود از طریق حلقه را در یک فیلد ذخیره کرد و لی جستجو و فیلتر دقیق انجام نمی شود.
امکان اینکه مثال زیر را با SqlServer شبیه سازی کرد هست ؟
محمد سلیم آبادی
دوشنبه 25 شهریور 1392, 20:53 عصر
حدس میزنم متوجه راه حلی که ارائه دادم نشدید و نتونستید در عمل ازش استفاده کنید.
همانطور که عرض کردم می تونید جستجوی دقیق با LIKE داشته باشین. فرض کنید میخواهیم سطرهایی را انتخاب کنیم که حاوی کد 3 بوده که قطعا کدهای 13، 31 یا هرچیزی مشابه این منظور ما نیست.
به دستور LIKE توجه کنید:
declare @t table (id int, list varchar(100));
insert @t values (1, '1,3,30,13,131'),(2, '1,30,13,131')
select id from @t
where ','+list+',' like '%,3,%';
fahimi
دوشنبه 25 شهریور 1392, 21:18 عصر
با تشکر
مشکلم من با Full Text Search حل شد.
من به سمت پشنهاد جنابعلی هم رفتم ولی چون در ابتدا و انتها از وبرگول استفاده نشده بود .سلکت جواب صیحیح را بازیابی نمی کرد
برای مثال
3,4,5
1,2,3
1,2,3,4
که 3 اول و 3 انتها شامل شرط ما نمی باشد.
اما در مثال آپلود شده برای سوال پیش آمده بود که روش من در طراحی دیتابیس صیحیح بوده است یا نه ؟
محمد سلیم آبادی
دوشنبه 25 شهریور 1392, 21:21 عصر
اشاره کردم که باید قبل و بعد رشته مورد نظر کاراکتر Delimiter رو قرار بدین. به Sample Code که قرار دادم هم توجه کنید خواهید دید که من ستون list که حاوی کد هست را با کاراکتر , الحاق کردم اول و آخر.
متاسفانه من برنامه MS Access رو ندارم که بتونم فایل شما را بررسی کنم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.