سؤال

لدي جدول مثل ما يلي،

| id  | name   | color  |
------+--------+---------
| 1   | pear   | green  |
| 2   | apple  | red    |
| 3   | banana | yellow |
| 4   | grape  | purple |

أرغب في إعادة ترتيب أبجديا باستخدام عمود "الاسم" وإعادة تعيين المعرف (AutoInCrement) مع هذا الترتيب الجديد إلى ما يلي بما يلي

| id  | name   | color  |
------+--------+---------
| 1   | apple  | red    |
| 2   | banana | yellow |
| 3   | grape  | purple |
| 4   | pear   | green  |

سؤال: كيف يمكنني أن أفعل هذا مع mysql؟

هل كانت مفيدة؟

المحلول

هل يمكنني أن أسأل لماذا تريد أن تفعل هذا؟

إذا قام أي شخص بتعديل أي من قيم الاسم أو إدراج صفوف جديدة، فسوف يفوض نظام الطلب الخاص بك. محاولة تخزين بعض المعنى في ترتيب PK المتوفرة بالفعل في أماكن أخرى من الجدول (عمود الاسم) يبدو زائدة عن الحاجة وبالتالي فكرة سيئة.

الحل الأفضل بكثير لا تقلق بشأن قيمة عمود المعرف والفرز فقط على عمود الاسم عند استخدام البيانات في التطبيق الخاص بك.

ملاحظة: آسف للاستجابة لنوع غير الإجابة. عادة ما أفترض أن لديك سبب وجيه وإعطاء إجابة تعالج مباشرة ما تحاول القيام به، لكنني لاحظت من أسئلتك الأخرى التي لا تزال في مراحل التعلم المبكر حول تصميم قاعدة البيانات، لذلك أردت المساعدة أشير إليك في الاتجاه الصحيح بدلا من المساعدة في مزيد من التقدم المحرز نحو نهج غير منصوص عليه.

نصائح أخرى

أنظف طريقة لإعادة ضبط الزيادة التلقائية هي إنشاء جدول آخر.

يوفر MySQL أوامر مثل CREATE TABLE LIKE و RENAME TABLE التي هي مفيدة.

CREATE TABLE table2 LIKE table1;

INSERT INTO table2
  SELECT * FROM table1 ORDER BY name;

DROP TABLE table1;

RENAME TABLE table2 TO table1;

يمكنك حدد في طاولة جديدة من الجدول القديم، وتطلب من الاختيار الخاص بك حسب الرغبة. لديك معرف الزيادة التلقائية في الجدول الجديد. إذا لزم الأمر، إسقاط الجدول القديم وإعادة تسمية الجدول الجديد.

لماذا لا تضيف "ترتيب حسب الاسم ASC" في نهاية الاستعلام الخاص بك؟ تخميني سيكون أنك بحاجة إلى معرف لسبب ما.

 SELECT
       RANK() Over (ORDER BY Name) As NewID
     , Name
     , Color

 FROM Fruits

يمكن أن يوفر إلى جدول TEMP ثم اقتطاع ثم اقتطاع طاولة الفاكهة وإدراجها، ولكن من المحتمل أن تكون حلولا كربي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top