واضح آرشیو وب فارسی:سایت ریسک: farman-h08-06-2009, 12:49 PMبا سلام خدمت دوستان من يه سوال در مورد پايگاه داده دارم .يك جدول دارم كه دو تا فيلد داره(يكي فيلد آدرس و ديگري شماره) من ميخوام هر وقت خواستم داده هايي به(فيلد آدرس وشماره) در جدول بانك اطلاعاتي وارد(INSERT) كنم به من بگه كه اطلاعات اين فيلد تكراري هست يا نه يعني اطلاعات قبلا وارد شده يا نه(در كل جستجويي ميخوام كه اين كار رو انجام بده) فيلد آدرس من از نوع varchar هست و اندازه اش هم 8000 است و نمي تونم اون فيلد رو كليد در نظر بگيرم .تازه ميخوام كه اطلاعاتم بصورت فارسي وار بشه VILIBILI08-06-2009, 04:15 PMفکر می کنم یا باید تک تک رکوردها رو چک کنی یا یه سرچ بزاری اگر چیزی پیدا شد که به کاربر می گی نمی تونی اگر هم نه اضافه می کنی. از ویزارد داری استفاده می کنی ؟ _H2_08-06-2009, 04:36 PMسلام با توجه به شرایط بهتر است در جهت سرعت ایندکس بندی بالاتر برای کلید از یک فیلد autonumber عددی استفاده کنید. سپس میتوانید فیلد تلفن (اگر منظورتان از شماره همین باشد) را یکتا معرفی کنید ولی .... گاهاً لازم میشود چندین تلفن وارد شود که یک راه ساده میتوانید (و پرهیز از ایجاد جدول دیگر و رابطه یک به چند) داشتن یک فیلد بزرگ برای تلفن با یک textbox چند خطی در برنامه باشد تا خودکاربر بتواند بین شماره تلفن های مختلف از اینتر(Enter - خط جدید) استفاده کنید. برای ذخیره متون غیر انگیلیسی (از جمله فارسی) نوع varchar و char (و یا text قدیمی) مناسب نیستند و شما باید از nvarchar و nchar (و یا ntext قدیمی) استفاده کنید. در خصوص جستجو باید توجه داشته باشید در متون بزرگ و چند خطی مثل همین آدرس و یا درج چندین تلفن در یک فیلد با جداسازی اینتر(همان که در فوق پیشنهاد کردم) جستجوهای معمول فایده خاصی ندارد. باز برای تلفن کار ساده تر است. دلیل آن است که از نظر برنامه نویسی دو عبارت وقتی برابر هستند که کاملاً و تک تک حروفشان برابر باشد... یعنی خیلی بعید و غیر ممکن است که یک آدرس اگر دوبار تایپی شود، همه حروفش مثل هم باشد، بالاخره فاصله ای و نقطه ای و خط تیره ایب کم و زیاد میشود، شاید یک بار "خیابان" تایپ شود و بار دوم "خ-" و سایر موارد و... سرچ عادی با اپراتور = انجام میشود که باید کاملاً برابر باشد. سرچ پیشرفته تر بعدی با اپراتور LIKE انجام میشود هکه میتواند کاراکترهای جاینشین (wildcard) را هم قبول کنید و مثلاً میتوان از ان برای پیدا کردن تلفنهای تکراری استفاده کرد. (البته همچنان میتوان برای درج چندیت تلفن از رابطعه یک به چند استفاده کرد ک ایندکس بندی پیدا میکند و سرچ ساده تر میشود.) آخرین نوع و پیشرفته ترین نوع سرچ سرویس FTS است که نیاز به تعریف کاتالوگ و ایندکس بندی دوره ای کامل فیلد مورد نظر دارد تا بتوان سرچ پیشرفته و مفهومی و سریعتری را پییده سازی کرد ولی همچنان نمیتوان به قطع گفت دو آدرس یکی هستند یا نه، در بهترین شرایط میتوان به کاربر هشدار داد که امکان دارد آدرس وارد شده قبلا ثبت شده باشد... و... موفق باشید. farman-h08-06-2009, 07:11 PMفکر می کنم یا باید تک تک رکوردها رو چک کنی یا یه سرچ بزاری اگر چیزی پیدا شد که به کاربر می گی نمی تونی اگر هم نه اضافه می کنی. از ویزارد داری استفاده می کنی ؟ نه ويزارد نيست كد نويسيه خواهش ميكنم اگه نظري داري برام بنويس farman-h08-06-2009, 07:17 PMسلام با توجه به شرایط بهتر است در جهت سرعت ایندکس بندی بالاتر برای کلید از یک فیلد autonumber عددی استفاده کنید. سپس میتوانید فیلد تلفن (اگر منظورتان از شماره همین باشد) را یکتا معرفی کنید ولی .... گاهاً لازم میشود چندین تلفن وارد شود که یک راه ساده میتوانید (و پرهیز از ایجاد جدول دیگر و رابطه یک به چند) داشتن یک فیلد بزرگ برای تلفن با یک textbox چند خطی در برنامه باشد تا خودکاربر بتواند بین شماره تلفن های مختلف از اینتر(Enter - خط جدید) استفاده کنید. برای ذخیره متون غیر انگیلیسی (از جمله فارسی) نوع varchar و char (و یا text قدیمی) مناسب نیستند و شما باید از nvarchar و nchar (و یا ntext قدیمی) استفاده کنید. در خصوص جستجو باید توجه داشته باشید در متون بزرگ و چند خطی مثل همین آدرس و یا درج چندین تلفن در یک فیلد با جداسازی اینتر(همان که در فوق پیشنهاد کردم) جستجوهای معمول فایده خاصی ندارد. باز برای تلفن کار ساده تر است. دلیل آن است که از نظر برنامه نویسی دو عبارت وقتی برابر هستند که کاملاً و تک تک حروفشان برابر باشد... یعنی خیلی بعید و غیر ممکن است که یک آدرس اگر دوبار تایپی شود، همه حروفش مثل هم باشد، بالاخره فاصله ای و نقطه ای و خط تیره ایب کم و زیاد میشود، شاید یک بار "خیابان" تایپ شود و بار دوم "خ-" و سایر موارد و... سرچ عادی با اپراتور = انجام میشود که باید کاملاً برابر باشد. سرچ پیشرفته تر بعدی با اپراتور LIKE انجام میشود هکه میتواند کاراکترهای جاینشین (wildcard) را هم قبول کنید و مثلاً میتوان از ان برای پیدا کردن تلفنهای تکراری استفاده کرد. (البته همچنان میتوان برای درج چندیت تلفن از رابطعه یک به چند استفاده کرد ک ایندکس بندی پیدا میکند و سرچ ساده تر میشود.) آخرین نوع و پیشرفته ترین نوع سرچ سرویس FTS است که نیاز به تعریف کاتالوگ و ایندکس بندی دوره ای کامل فیلد مورد نظر دارد تا بتوان سرچ پیشرفته و مفهومی و سریعتری را پییده سازی کرد ولی همچنان نمیتوان به قطع گفت دو آدرس یکی هستند یا نه، در بهترین شرایط میتوان به کاربر هشدار داد که امکان دارد آدرس وارد شده قبلا ثبت شده باشد... و... موفق باشید. دستت درد نكنه.اگه ميشه كد اون جستجو رو برام بزار ممنون ميشم.راستش ميخوام دو تا آدرس رو با هم مقايسه كنم ببينم آدرس دومي چقدر حرف تكراري در آدرس اولي داره. _H2_09-06-2009, 12:07 AMسلام همانطور که گفتم جستجو آدرس الگوریتم آسانی پیدا نمیکند و در بهترین شرایط هم نمیتوان به نتیجه قطعی رسید و true و false ای گفت که آدرس تکراری است یا نه. شاید طبق یک الگوریتم معمولی به این نتیجه برسیم که... 1- شما آدرس را باید به کلمات تشکیل دهنده اش بشکند که با فاصله و یا نقطه و یا خط تیره و... جدا شده اند... 2- بعد باید کلمات از یک حد کوچکتر ار حذف کنید (مثلاً کلمات سه حرفی به پایین ...) 3- سپس باید بیشترین حضور این کلمات باقی مانده را در هر سطر جداگانه محاسبه کنید. 4- بعد مهم درصد تعداد کلمات عبارت اول (نتیجه آیتم 2 توضیحات) است که در هر سطر تکرار شده و اگر از یک مقدار خاص (مثلاً 70 یا 80) بیشتر باشد، میتوان اینطور نتیجه گرفت که احتمالاً دو آدرس شاید برابر باشند. ===== من متاسفانه فرصت خالی کافی برای پیاده سازی این الگوریتم را ندارم، شاید دوستان دیگر بتوانند کمک کنند... ولی اگر سوال موردی و خاصی داشته باشید همچنان در خدمت هستم. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 955]