محمد فائز العامري2 نشر 11 أكتوبر أرسل تقرير نشر 11 أكتوبر مثلا عند سته عناصر في الجدول و اريد حذف عنصر من الجدول , فالمفروض يكون الترتيب تنازلي من الواحد الخمسة , بعد عملية الحذف مع العلم ان id , primrey key , كيف احل هذه المشكلة 1 اقتباس
0 Mustafa Suleiman نشر 12 أكتوبر أرسل تقرير نشر 12 أكتوبر خاصية IDENTITY تُعيّن أرقامًا متسلسلة تلقائيًا، ولا تُعيد ترتيب الصفوف الموجودة تلقائيًا عند حذف صف. في حال الترتيب التنازلي ضروريًا لديك لعرض البيانات أو منطق التطبيق، ولكن ليس مرتبطًا بشكل أساسي بسلامة البيانات، فمن الأفضل عدم الاعتماد على عمود IDENTITY لذلك، وأنشئ عمودًا جديدًا (مثل DisplayOrder أو SortOrder) من نوع INT ثم قم بملء العمود بالترتيب المطلوب عند إدخال الصفوف. وعند حذف صف، ستحتاج إلى تحديث عمود DisplayOrder للصفوف المتبقية للحفاظ على التسلسل، وذلك يتطلب جملة UPDATE مفصلة أكثر. يوجد خيار آخر أبسط، وهو إن لم تكن الفجوات في عمود IDENTITY مشكلة كبيرة لتطبيقك، فإن أبسط حل هو ترك عمود IDENTITY كما هو، وستكون الأرقام متسلسلة ولكن سيكون بها فجوات بعد عمليات الحذف، تستطيع بعد ذلك ترتيب نتائجك في الاستعلام باستخدام ORDER BY Id DESC. DELETE FROM TB_CAT WHERE Id = 3; SELECT * FROM TB_CAT ORDER BY Id DESC; اقتباس
0 محمد فائز العامري2 نشر 12 أكتوبر الكاتب أرسل تقرير نشر 12 أكتوبر بتاريخ 10 ساعة قال Mustafa Suleiman: خاصية IDENTITY تُعيّن أرقامًا متسلسلة تلقائيًا، ولا تُعيد ترتيب الصفوف الموجودة تلقائيًا عند حذف صف. في حال الترتيب التنازلي ضروريًا لديك لعرض البيانات أو منطق التطبيق، ولكن ليس مرتبطًا بشكل أساسي بسلامة البيانات، فمن الأفضل عدم الاعتماد على عمود IDENTITY لذلك، وأنشئ عمودًا جديدًا (مثل DisplayOrder أو SortOrder) من نوع INT ثم قم بملء العمود بالترتيب المطلوب عند إدخال الصفوف. وعند حذف صف، ستحتاج إلى تحديث عمود DisplayOrder للصفوف المتبقية للحفاظ على التسلسل، وذلك يتطلب جملة UPDATE مفصلة أكثر. يوجد خيار آخر أبسط، وهو إن لم تكن الفجوات في عمود IDENTITY مشكلة كبيرة لتطبيقك، فإن أبسط حل هو ترك عمود IDENTITY كما هو، وستكون الأرقام متسلسلة ولكن سيكون بها فجوات بعد عمليات الحذف، تستطيع بعد ذلك ترتيب نتائجك في الاستعلام باستخدام ORDER BY Id DESC. DELETE FROM TB_CAT WHERE Id = 3; SELECT * FROM TB_CAT ORDER BY Id DESC; لم استوعب الفكرة جيدا , ممكن يكون الشرح للفكرة اعمل اكثر بتاريخ 5 ساعة قال محمد فائز العامري2: لم استوعب الفكرة جيدا , ممكن يكون الشرح للفكرة اعمل اكثر ممكن يكون الشرح للفكرة عملي اكثر اقتباس
0 Mustafa Suleiman نشر 12 أكتوبر أرسل تقرير نشر 12 أكتوبر أقصد استخدامك لعمود IDENTITY (الذي يزيد تلقائيًا) كمفتاح أساسي وعندما تحذف صفًا، يبقى الفراغ في تسلسل الأرقام، ولا يعيد IDENTITY استخدام الأرقام المحذوفة. لذا إما تجاهل الفراغات وذلك أبسط حل، لأنّ IDENTITY يقوم بعمله كمفتاح أساسي فريد، والفراغات لا تؤثر على عمل قاعدة البيانات إلا في حال لديك تقارير تحتاج لتسلسل متصل، لكن رتّب نتائج الاستعلام فقط عند عرضها. لا تحتاج لتغيير أي شيء في قاعدة البيانات كالتالي: SELECT * FROM TB_CAT ORDER BY Id DESC; أما لو الترتيب التنازلي ضروريًا دائمًا فأضف عمودًا جديدًا لجدولك، مثل DisplayOrder من نوع INT، وسيحتوي على الترتيب الذي تريده للعرض. وعند إضافة صف جديد، املأ DisplayOrder بالترتيب الصحيح، بواسطة دالة أو استعلام للحصول على أعلى قيمة في DisplayOrder ثم إضافة 1. وعند حذف صف، ستحتاج لتحديث DisplayOrder للصفوف المتبقية، وذلك يتطلب استعلام UPDATE معقد نوعًا ما. كالتالي: DELETE FROM TB_CAT WHERE Id = 3; UPDATE TB_CAT SET DisplayOrder = ROW_NUMBER() OVER (ORDER BY Id) سيتم إعادة ترقيم DisplayOrder باستخدام ROW_NUMBER()، لكن الاستعلام سيكون بطيئًا جدًا مع الجداول الكبيرة. أيضًا تستطيع ضبط مسألة التسلسل من خلال الواجهة الأمامية من خلال حلقة تكرار وجلب البيانات من قاعدة البيانات، وذلك أفضل. اقتباس
السؤال
محمد فائز العامري2
مثلا عند سته عناصر في الجدول و اريد حذف عنصر من الجدول , فالمفروض يكون الترتيب تنازلي من الواحد الخمسة , بعد عملية الحذف
مع العلم ان id , primrey key ,
كيف احل هذه المشكلة
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.