شبكة تعلم مع ناو

كيف يرتب ORDER BY قيم ENUM في MySQL؟

عند ترتيب عمود ENUM مباشرة، يستخدم MySQL ترتيب عناصر القائمة في تعريف النوع، وليس الترتيب الأبجدي لأسمائها. يحصل كل عنصر على فهرس داخلي يبدأ من واحد، ويعكس هذا الفهرس موقعه في التعريف. لذلك يؤثر ترتيب كتابة القيم عند إنشاء العمود في نتيجة الفرز اللاحقة.

إذا عرّفت مستويات الأولوية بالترتيب low ثم medium ثم high، فإن الفرز التصاعدي المباشر يعرضها بهذا الترتيب. لا يغير إدخال الصفوف بترتيب مختلف هذه القاعدة. هذا السلوك قد يكون مفيدًا عندما يطابق ترتيب القائمة المعنى المطلوب في التطبيق، لكنه قد يفاجئ من يتوقع فرزًا أبجديًا. عند مراجعة استعلام يعرض نتائج غير متوقعة، افحص نوع العمود وتعريف قائمته قبل افتراض أن المشكلة في ترتيب الإدخال أو في نصوص القيم نفسها.

مثال

CREATE TABLE tasks (
  priority ENUM('low', 'medium', 'high')
);
INSERT INTO tasks VALUES ('high'), ('low'), ('medium');
SELECT priority FROM tasks ORDER BY priority;

باختصار: يرتب الفرز المباشر قيم ENUM وفق مواقعها في تعريف القائمة، وليس وفق حروف أسمائها.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.