View Full Version : ویرایش فیلد کلید در دو جدول تو در تو
zharfa
سه شنبه 21 مهر 1394, 08:16 صبح
سلام دوستان
من دو تا جدول دارم که توسط کلیدی ب هم وصل هستند
در جدول اول فیلد کلید دارم که شماره رکوردمه و فیلد تاریخ و یکسیری اطلاعات دیگه
و تو جدول دومم برای یک رکورد از جدول 1 ب تعداد مشخصی رکورد در جدول 2 دارم
مثال میزنم
Table1
1--------94/07/21
2---------94/06/30
Table2
1---------- 1200
1---------1300
1-----------1400
2---------2000
2----------700
حالا میخوام اطلاعات و کد جداول رو بر حسب تاریخ مرتب کنم
مثلا تو جدول 1 فیلیدیکه کد 1 گرفته چون تاریخش بعد هستش باید بشه 2 و همین اصلاح تو جدول 2 هم انجام بشه
آیا راهی هست ؟
SabaSabouhi
سه شنبه 21 مهر 1394, 09:04 صبح
سلام دوستان
من دو تا جدول دارم که توسط کلیدی ب هم وصل هستند
در جدول اول فیلد کلید دارم که شماره رکوردمه و فیلد تاریخ و یکسیری اطلاعات دیگه
و تو جدول دومم برای یک رکورد از جدول 1 ب تعداد مشخصی رکورد در جدول 2 دارم
مثال میزنم
Table1
1--------94/07/21
2---------94/06/30
Table2
1---------- 1200
1---------1300
1-----------1400
2---------2000
2----------700
حالا میخوام اطلاعات و کد جداول رو بر حسب تاریخ مرتب کنم
مثلا تو جدول 1 فیلیدیکه کد 1 گرفته چون تاریخش بعد هستش باید بشه 2 و همین اصلاح تو جدول 2 هم انجام بشه
آیا راهی هست ؟
سلام
از فیلد Id فقط برای کلید اصلی بودن استفاده کن و نه چیز دیگه، اگه نیاز دیگهای داری یک ستون جدید اضافه کن که نیازی به تغییر کلید نداشته باشی.
اما اگه میخوای کلید اصلی رو عوض کنی و جدولهای مرتبط هم اصلاح بشن، باید نوع رابطهی جدولها رو اصلاح کنی و Update Rule رو از حالت No Action به Cascade تبدیل کنی.
صبا صبوحی
علی فتحی
سه شنبه 21 مهر 1394, 10:16 صبح
فکر کنم باید شرط بزاری با forech.ستونهایی که با تیبل یک همخوانی داره عوض بشه من با لینک اینکاروکردم
zharfa
سه شنبه 21 مهر 1394, 12:41 عصر
دوست عزیزم صبا خانوم من منظورم این بود که چطوری همه فیلدهای جدول 1 رو ویرایش کنم مثلا رکورد شماره 1 من تاریخش 31/1/1394 هستش و رکورد شماره 13من تاریخش 1394/1/1 اوکی؟ حالا من میخوام بگم کد کلیه رکوردهامو بر اساس تاریخ مرتب کنه یعنی رکورد شماره 13 من که تاریخش 1394/1/1 بود بشه رکورد شماره 1 و الی آخر ...
zharfa
سه شنبه 21 مهر 1394, 12:48 عصر
آقای فتحی من منتظر لینک شما هستم
zharfa
سه شنبه 21 مهر 1394, 12:53 عصر
روشی که خودم رفتم ب این شکله :
با فرض بر اینکه 100 رکورد دارم
ولی مرتب نیستند ... مثلا رکورد اول تاریخش جدیدتره ولی رکوردهای بعدی تاریخشون قدیمی تر
1) اول اومدم داده هامو بر اساس تاریخ مرتب کردم
حالا دیگه رکوردهام ب ترتیب تاریخ مرتب هستند ولی شماره رکوردام پس و پیشن
2) دوم گفتم این جدول مرتب شده رو از 101 ب ترتیب شماره گذاری کن (با دستور FOR گفتم که ب ترتیب از اولین رکورد شروع کنه اولی رو بذاره 101 دومی رو بذاره 102 و الی آخر .... چون MAX کد من 100 هستش و بیشتر 100 برای فیلد رکوردی وجود نداره )
بعده این مرحله جول من بر اساس تاریخ مرتب شده اما از 101 شماره گذاری شده
حالا
3)تو مرحله سوم گفتم دوباره جدول رو از شماره 1 ( که دیگه رکورد 1 موجود نیست ) شماره گذاری کنه (دستور FOR گفتم اولین رکورد رو که 101 هستش رو بذار 1 دومی رو که 102 شده رو بذار 2 و الی آخر)
جواب هم گرفتم منتهی اگر راه بهتری هم هست ممنون میشم بهم نشون بدید
SabaSabouhi
سه شنبه 21 مهر 1394, 13:37 عصر
دوست عزیزم صبا خانوم من منظورم این بود که چطوری همه فیلدهای جدول 1 رو ویرایش کنم مثلا رکورد شماره 1 من تاریخش 31/1/1394 هستش و رکورد شماره 13من تاریخش 1394/1/1 اوکی؟ حالا من میخوام بگم کد کلیه رکوردهامو بر اساس تاریخ مرتب کنه یعنی رکورد شماره 13 من که تاریخش 1394/1/1 بود بشه رکورد شماره 1 و الی آخر ...
سلام
خواهش میکنم یک بار دیگه پست من رو بخون. اشتباه شما اینه که از Id میخواهی برای شماره سطر استفاده کنی. این کار صحیح نیست.
شما سطر رو توی دیتابیس نگهداری نمیکنن. روشهای دیگهای برای این کار موجوده. تو T-Sql روشش موجوده، تو برنامه اگه بخوای استفاده کنی روش داره
و اگه تو گزارش هم بخوای استفاده کنی، اغلب گزارشسازها این امکان رو دارن.
این کاری که شما داری انجام میدی ( صرف نظر از اشتباه بودنش ) امکانپذیر هست، اما بهتره که از همین الان روش کارت رو اصلاح کنی و کار
درست رو انجام بدی.
در ضمن من خانم نیستم.
صبا صبوحی
zharfa
سه شنبه 21 مهر 1394, 14:15 عصر
شما همش گفتی روش داره
ولی اشاره ای نکردی
من Update Rule رو از حالت No Action به Cascade تبدیل کردم
مشکلی ندارم
فقط شیوه ای میخوام که بهم بگه چه جوری دسته ای از رکوردها رو فیلدشونو ویرایش کنم
همین ...
صبا صبوحی هم از نظر بنده دلالت بر یک خانم داره اگر پسوند و پیشوندی هم داره خیلی بهتره کنارش بگذارید
zharfa
سه شنبه 21 مهر 1394, 14:22 عصر
من جدولی دارم که توش 100 تا رکورده میام این جدول رو بر اساس تاریخ مرتب میکنم ولی میبینم شماره رکوردام بهم میریزه
میخوام ب ترتیب تاریخ که مرتب شده همونجوری هم مجددا شماره گذاری بشه
...
آیا کسی کمکی میکنه؟
nunegandom
سه شنبه 21 مهر 1394, 14:29 عصر
یه راه حل به نظرم میرسه
یه جدول موقت باید بسازی و این رکورد ها رو توش قرار بدی و رکورد های جدول اصلی رو توش بذاری و مرتب کنی و ...
بعدشم که کارت تموم شد بریز تو جدول اصلی
اینم ساخت جدول موقت با سی شارپ (http://stackoverflow.com/questions/18758396/c-sharp-select-into-explaination-temporary-tables)
zharfa
سه شنبه 21 مهر 1394, 14:30 عصر
من خودم یک روشی رو رفتم اونم ب این شکله
از حلقه FOR استفاده کردم و جدول مرتب شده رو انداختم توی حلقه و گفتم ب ترتیب اولین رکورد رو شمارشو بذار 1 دومین رکورد رو شمارشو تغییر بده به 2 سومین رکوردو شمارشو تغییر بده به 3 و الی آخر
اما به یک مشکلی برخوردم اونم این بود که من رکورد شماره 1 رو دارم و زمانی که میگم رکورد اول رو بذار 1 خطا میگیره میگه موجوده ...
برای همین اومدم همین کار رو تو دو مرحله انجام دادم
بیشترین مقدار فیلد کد رو گرفتم مثلا شد 100 اومدم همین حلقه رو نوشتم و گفتم که اولین رکوردو بزن101 دومیشو بزن102 و الی آخر ...
چون دیگه 101 و 102 و ... وجود نداشت اوکی داد ...
و بعدش اومدم همین رکوردهارو مجددا از شماره 1 شماره گذاری کردم
جواب هم گرفتم
ولی نمیدونم راه خوبی رفتم یا نه ...
هر چی فکر کردم این ب ذهنم رسید
zharfa
سه شنبه 21 مهر 1394, 14:34 عصر
یه راه حل به نظرم میرسه
یه جدول موقت باید بسازی و این رکورد ها رو توش قرار بدی و رکورد های جدول اصلی رو توش بذاری و مرتب کنی و ...
بعدشم که کارت تموم شد بریز تو جدول اصلی
اینم ساخت جدول موقت با سی شارپ (http://stackoverflow.com/questions/18758396/c-sharp-select-into-explaination-temporary-tables)
دوست عزیز خالی کردن جدول اصلیم به هیچ وجه امکانپذیر نیست
nunegandom
سه شنبه 21 مهر 1394, 21:01 عصر
فکر کردم قرار نیست حتی آی دی ها هم تغییر کنند!
شماره ای که میگید منظورتون id هستش؟
id اگه identity باشه که فکر نکنم بشه تغییرش داد مگر اینکه کل اطلاعات جدول رو حذف کنی و مجددا بریزی داخلش مثل همون روشی که بالا گفتم
اگه منظورتون یه فیلد identity شده نیست کار سختی نیست
اگه توی انجمن sql مطرحش کنید بهتره چون اونجا کد tsql بهتون میدن و مسئولیت پردازش میوفته با sql server
اینجا کد C# میدیم میوفته رو برنامه
zharfa
سه شنبه 21 مهر 1394, 21:24 عصر
خیلی ممنون
ولی روشی که خودم نوشتم رو بررسی کردید ؟
کسی نظری راجع ب روش خودم نداره ؟
Mahmoud.Afrad
چهارشنبه 22 مهر 1394, 00:13 صبح
http://barnamenevis.org/showthread.php?453225-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AF%D9%88%D8%A8%D8%A7%D8%B1%D9%87&p=2267718&viewfull=1#post2267718
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.