PDA

View Full Version : مشکل با SQL (رکوردهای تکراری )



mojtaba-saleh
پنج شنبه 02 اسفند 1386, 16:03 عصر
سلاممن توی دیتابیسم یک جدول دارم شامل 3 فیلدوقتی مثلا 2 تا رکورد داشته باشم که همه فیلدهاش محتویاتش شبیه هم باشه, دیگه پاک نمی شه.برای توضیح بهتر اینجوری :
فیلد 1 فیلد 2 فیلد 3
سلام خوبی؟ خوبم
سلام خوبی؟ خوبم
سلام خوبی؟ خوبم

مشکل از چیه

komail_sh
پنج شنبه 02 اسفند 1386, 16:14 عصر
مشکل رو واضح تر توضیح بده
با چی میخوایی پاکشون کنی؟ ضمن اینکه میتونی برای تفاوت ایجاد کردن بین رکوردها یه فیلد کد هم براشون بزاری و زمان پاک کردن از اون کد استفاده کنی

mojtaba-saleh
پنج شنبه 02 اسفند 1386, 16:19 عصر
سلام
نه با دستورات SQL میشه پاک کرد نه وقتی که با استفاده از Visual Studio محتویات جدول رو میارم.
با VS حتی وقتی یکی از دو رکورد رو Del می خوام بکنم پیام میده.
دستورات Sql رو برای جداول دیگه که نیاز به تکراری بودن نداره امتحان کردم کاملا جواب داد

komail_sh
پنج شنبه 02 اسفند 1386, 16:23 عصر
دستورات Sql رو برای جداول دیگه که نیاز به تکراری بودن نداره امتحان کردم کاملا جواب داد

1- یعنی اینکه توی جدولت نیاز داری که رکوردات تکراری باشن
2- چرا فیلد کد اضافه نمیکنی

choobin84
پنج شنبه 02 اسفند 1386, 19:48 عصر
سلاممن توی دیتابیسم یک جدول دارم شامل 3 فیلدوقتی مثلا 2 تا رکورد داشته باشم که همه فیلدهاش محتویاتش شبیه هم باشه, دیگه پاک نمی شه.برای توضیح بهتر اینجوری :
فیلد 1 فیلد 2 فیلد 3
سلام خوبی؟ خوبم
سلام خوبی؟ خوبم
سلام خوبی؟ خوبم

مشکل از چیه
پاک نمیشن چون کلید نداری و همشون یکی اند.
کی گفته با کد نویسی پاک نمی شه.

delete from table where
field1="سلام"
and filed2="چطوری"
and filed3="خوبم"

linux
پنج شنبه 02 اسفند 1386, 19:55 عصر
سلاممن توی دیتابیسم یک جدول دارم شامل 3 فیلدوقتی مثلا 2 تا رکورد داشته باشم که همه فیلدهاش محتویاتش شبیه هم باشه, دیگه پاک نمی شه.برای توضیح بهتر اینجوری :
فیلد 1 فیلد 2 فیلد 3
سلام خوبی؟ خوبم
سلام خوبی؟ خوبم
سلام خوبی؟ خوبم

مشکل از چیه
شما باید در جدولتان حتما PK داشته باشد

mojtaba-saleh
جمعه 03 اسفند 1386, 14:38 عصر
سلام
ببینید من جدولم مال یک برنامه دریافت sms هست که هر نفری که پیام میفرسته رو ذخیره می کنه. امکانی براش گذاشتم که بشه انتخاب کرد برای یک موضوع یک شماره بتونه چند بار پیام بده یا نه. حالا اگه این امکان غیرفعال باشه (که یک شماره بتونه چند بار پیام بده ) اگر دوباره گزینه ای رو که یک بار انتخاب کرده , دوباره انتخاب کنه دیگه هیچ کدومش پاک نمیشن


delete from table where
field1="سلام"
and filed2="چطوری"
and filed3="خوبم"
با این هم نشد.


شما باید در جدولتان حتما PK داشته باشد
میشه توضیح بدین ؟

saeed_rezaei
جمعه 03 اسفند 1386, 14:54 عصر
سلام.
وقتی که هیچ فیلدی رو به عنوان کلید اصلی (pk) تعریف نکنید. همچین مشکلی پیش می یاد. فیلد کلید اصلی فیلدی هست که مقدارش کاملا یکتا هست. یعنی هیچ رکورد دیگه ای پیدا نمی شه که مقدار این فیلدش متناظر باشه. در هنگام طراحی جدولت در اس کیو ال، فیلد مورد نظر رو انتخاب کن و سپس با کلیک بر روی دکمه کلید زرد رنگ در نوار بالای صفحه اون رو تبدیل کن به کلید اصلی.
برای جداولتون یک کلید اصلی تعریف کنید. چون یک شماره ممکنه بیش از یک پیام ارسال کنه پس شماره همراه نمی تونه کلید اصلی باشه. شما می تونید برای ساخت کلید اصلی از نوع فیلد id (البته فکر می کنم این باشه) استفاده کنید تا هنگام ایجاد رکورد جدید، خود اس کیو ال یه شماره سریال بهش بده. این شماره ها از 1 شروع می شن و با ایجاد هر رکورد یه شماره اضافه می کنه. اینجوری هر رکورد یه شماره منحصر به فرد داره.

بدین ترتیب، می تونید از رکوردهای تکراری داشته باشید بدون اینکه مشکلی در مدیریت اونها پیش بیاد.




کی گفته با کد نویسی پاک نمی شه.
کد:
delete from table where
field1="سلام"
and filed2="چطوری"
and filed3="خوبم"




بله. این در صورتی هست که بخواید تمامی رکوردهای تکراری رو حذف کنید. در مواردی که مثلا 3 تا رکورد تکراری داریم و بخوایم یه دونش رو بزاریم کدش فرق می کنه.

mojtaba-saleh
جمعه 03 اسفند 1386, 17:20 عصر
سلام
ممنون از لطفتون
مشکلم حل شد