اطلب حسب MySQLاستعلام ASC و DESC مع مثال

⚡ ملخص ذكي

اطلب حسب MySQL يُرتب نتائج الاستعلام تصاعديًا أو تنازليًا باستخدام الكلمتين المفتاحيتين ASC وDESC. تشرح الأقسام التالية الصيغة، والفرز أحادي العمود ومتعدد الأعمدة، ووضع القيم الفارغة، وأمثلة عملية مُنفذة على قاعدة بيانات myflixdb النموذجية.

  • 🔠 السلوك الافتراضي: تقوم عبارة ORDER BY بالترتيب التصاعدي عندما لا يتم تحديد ASC أو DESC، لذا فإن ASC اختياري في معظم العبارات.
  • ⬆️ الكلمات المفتاحية ASC: يقوم نظام ASC بترتيب الأرقام من الأدنى إلى الأعلى، والسلاسل من الألف إلى الياء، والتواريخ من الأقدم إلى الأحدث.
  • ⬇️ الكلمات المفتاحية للوصف: يعكس نظام DESC هذا التسلسل، وهو ما يناسب سجلات الدفع التي تبدأ بالدفعات الحديثة أولاً وقوائم تواريخ الميلاد المتناقصة.
  • 🧮 فرز متعدد الأعمدة: ترتيب الأعمدة مهم. ORDER BY gender, date_of_birth DESC يرتب الجنس تصاعديًا أولًا، ثم التواريخ تنازليًا داخل كل مجموعة.
  • 🔎 تركيبة البنود: يقوم WHERE بتصفية الصفوف، ويقوم GROUP BY بتجميعها، ويقوم ORDER BY بترتيب النتيجة، ويقوم LIMIT بتقليصها.
  • ⚙️ عامل الأداء: يسمح الفهرس الموجود على العمود المصنف MySQL لتجنب عملية فرز الملفات على الجداول الكبيرة.

اطلب حسب MySQL

ما هو الطلب حسب في MySQL?

MySQL ترتيب حسب تُستخدم عبارة SELECT مع استعلام SELECT لفرز البيانات بطريقة منظمة. MySQL تقوم عبارة ORDER BY بترتيب مجموعة نتائج الاستعلام إما بترتيب تصاعدي أو تنازلي، على عمود واحد أو على عدة أعمدة في وقت واحد.

عند استخدام أمر SELECT بمفرده، تُعاد الصفوف بالترتيب الذي يقرأه محرك التخزين، وهو ترتيب غير مضمون. الفرز هو ببساطة إعادة ترتيب هذه الصفوف وفق تسلسل محدد. ويمكن تطبيقه على أنواع البيانات الرقمية والنصية والتاريخية على حد سواء.

MySQL صيغة الترتيب حسب

قبل النظر إلى الأمثلة، من المفيد معرفة مكان وجود الشرط داخل عبارة SELECT كاملة.

SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];

هنا

  • "اختيار البيان... " هو استعلام التحديد العادي.
  • " | " يمثل بدائل.
  • "[شرط الشرط | تجميع حسب `اسم_الحقل(ات)` مع وجود الشرط]" الشرط الاختياري المستخدم لتصفية مجموعة نتائج الاستعلام.
  • "ترتيب حسب" يقوم بفرز مجموعة نتائج الاستعلام.
  • “[ASC | DESC]" تُستخدم الكلمة المفتاحية لترتيب مجموعة النتائج إما تصاعديًا أو تنازليًا. لاحظ أن ASC هو الافتراضي.

ما هي الكلمات الرئيسية DESC وASC؟

يُعدّ كلٌّ من ASC و DESC اتجاهي الفرز اللذين تقبلهما عبارة ORDER BY. يقارن الجدول أدناه بينهما عبر أنواع البيانات التي ستستخدمها للفرز في أغلب الأحيان.

الكلمات الرئيسية DESC وASCASC هو الشكل القصير للصاعد الكلمات الرئيسية DESC وASCMySQL DESC هو الشكل القصير للتنازلي
يتم استخدامه لفرز نتائج الاستعلام بأسلوب من أعلى إلى أسفل. تُستخدم هذه الخاصية لفرز نتائج الاستعلام من الأسفل إلى الأعلى.
عند العمل على أنواع بيانات التاريخ، يظهر التاريخ الأقدم أعلى القائمة. عند العمل على أنواع بيانات التاريخ، يتم عرض أحدث تاريخ في أعلى القائمة.
عند التعامل مع أنواع البيانات الرقمية، تظهر القيم الأدنى في أعلى القائمة. عند العمل مع أنواع البيانات الرقمية، تظهر أعلى القيم في أعلى مجموعة نتائج الاستعلام.
عند العمل مع أنواع بيانات السلسلة، يتم فرز مجموعة نتائج الاستعلام من تلك التي تبدأ بالحرف A وصولاً إلى الحرف Z. عند العمل مع أنواع بيانات السلسلة، يتم فرز مجموعة نتائج الاستعلام من تلك التي تبدأ بالحرف Z نزولاً إلى الحرف A.

تُستخدم كل من الكلمات المفتاحية SQL DESC و ASC بالتزامن مع عبارة SELECT و MySQL ORDER BY جملة.

صيغة DESC و ASC

تحتوي كلمة الترتيب SQL DESC على بناء الجملة الأساسي التالي.

SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];

هنا

  • حدد {اسم الحقل (الأسماء) | *} من اسم (أسماء) الجدول هو البيان الذي يحتوي على الحقول والجداول التي سيتم الحصول منها على مجموعة النتائج.
  • [أين الشرط] يعد اختياريًا ولكن يمكن استخدامه لتصفية البيانات وفقًا للحالة المحددة.
  • ترتيب النتائج حسب اسم (أسماء) الحقل يُعدّ هذا الحقل إلزاميًا، ويُحدد اسم الحقل الذي يتمّ فرز البيانات بناءً عليه. MySQL تحدد الكلمة المفتاحية DESC أن الفرز يتم بترتيب تنازلي.
  • [الحد الأقصى N] هذا الخيار اختياري، ولكن يمكن استخدامه للحد من عدد الصفوف التي يتم إرجاعها من مجموعة نتائج الاستعلام.

لماذا نستخدم DESC و ASC في MySQL?

إن معرفة الصيغة ليست سوى نصف الحقيقة. فسبب وجود عبارة ORDER BY هو أن مجموعة النتائج التي يسهل على قاعدة البيانات إنتاجها لا يسهل على الشخص قراءتها دائمًا.

لنفترض أنك تطبع سجل مدفوعات أحد أعضاء مكتبة الفيديو لتمكين موظفي الاستقبال من الرد على الاستفسارات بسرعة. من المنطقي أكثر طباعة المدفوعات بترتيب زمني تنازلي، بدءًا من أحدث دفعة وصولًا إلى أقدمها. في هذه الحالة، تُعدّ كلمة DESC في لغة SQL مفيدة للغاية، إذ يُمكن فرز القائمة حسب تاريخ الدفع.

لنفترض الآن أن قسم التسويق يريد قائمة بالأفلام مصنفة حسب الفئة، حتى يتمكن الأعضاء من الاطلاع على العناوين المتوفرة في المكتبة قبل استئجارها. يتيح ترتيب أسماء الفئات وعناوين الأفلام تصاعديًا للأعضاء البحث عن المعلومات بسرعة، تمامًا كما يفعلون في الفهرس. وتؤدي الكلمة المفتاحية ASC هذا الغرض.

باختصار، تقوم عبارة ORDER BY بتحويل مجموعة النتائج الأولية إلى تقرير. وتعتمد الكلمة المفتاحية التي تختارها على السؤال الذي يطرحه القارئ. ما الذي حدث مؤخراً؟ يدعو إلى استخدام نظام DESC، بينما أين أجد هذا المنتج؟ يدعو إلى ASC.

MySQL مثال على الترتيب حسب

جميع الأمثلة التالية تُطبّق على قاعدة بيانات myflixdb التجريبية. ابدأ بجدول الأعضاء غير المرتب، والذي يُعاد بترتيبه الافتراضي.

SELECT * FROM members;

تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench عند استخدامه مع قاعدة بيانات myflixdb النتائج التالية الموضحة أدناه.

رقم العضوية الأسماء الكاملة جنس تاريخ الميلاد العنوان الفعلي العنوان البريدي رقم الاتصال البريد الإلكتروني
1 جانيت جونز أنثى 21-07-1980 الشارع الأول قطعة رقم 4 حقيبة خاصة 0759-253-542 جانيتجونز@yagoo.cm
2 جانيت سميث جونز أنثى 23-06-1980 ميلروز 123 اغية اغية jj@fstreet.com
3 روبرت فيل ذكر 12-07-1989 الشارع الثالث 3 اغية 12345 rm@tstreet.com
4 غلوريا ويليامز أنثى 14-02-1984 الشارع الثاني 2 اغية اغية اغية
5 ليونارد هوفستاتر ذكر اغية وودكريست اغية 845738767 اغية
6 شيلدون كوبر ذكر اغية وودكريست اغية 976736763 اغية
7 راجيش كوثرابالي ذكر اغية وودكريست اغية 938867763 اغية
8 ليزلي وينكل ذكر 14-02-1984 وودكريست اغية 987636553 اغية
9 هوارد ولويتز ذكر 24-08-1981 ساوث بارك صندوق بريد P.O. Box 4563 987786553 اغية

الترتيب تنازليًا باستخدام DESC

لنفترض أن قسم التسويق يرغب في ترتيب بيانات الأعضاء تنازليًا حسب تاريخ الميلاد. يساعد هذا الفريق على إرسال تهاني أعياد الميلاد في الوقت المناسب. يتم إنشاء القائمة بواسطة الاستعلام أدناه.

SELECT * FROM members ORDER BY date_of_birth DESC;

تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench عند استخدامه مع قاعدة بيانات myflixdb النتائج التالية الموضحة أدناه.

MySQL نتيجة استعلام ORDER BY DESC

الترتيب تصاعديًا باستخدام ASC

نفس الاستعلام بترتيب تصاعدي يقوم ببساطة بتبديل الكلمة الرئيسية.

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL نتيجة استعلام الترتيب التصاعدي

ملاحظة: القيمة NULL تعني عدم وجود قيمة على الإطلاق، وهذا يختلف عن الصفر أو السلسلة النصية الفارغة. لاحظ في كلتا لقطتي الشاشة كيف يتم تجميع التواريخ ذات القيمة NULL معًا: MySQL يعامل NULL على أنه أقل من أي قيمة أخرى، لذلك تظهر صفوف NULL أولاً تحت ASC وأخيراً تحت DESC.

كيفية الفرز حسب أعمدة متعددة في MySQL

يُجيب الفرز بناءً على عمود واحد على أسئلة بسيطة. عادةً ما تحتاج التقارير إلى مستوى ثانٍ من الترتيب، ويقبل الأمر ORDER BY قائمة حقول مفصولة بفواصل لهذا الغرض تحديدًا.

ضع في اعتبارك نص SQL التالي لفرز البيانات والذي يسرد جميع سجلات الأعضاء دون أي توجيه صريح.

SELECT * FROM `members`;

يؤدي تنفيذ البرنامج النصي أعلاه إلى الحصول على النتائج التالية الموضحة أدناه.

رقم العضوية الأسماء الكاملة جنس تاريخ الميلاد العنوان الفعلي العنوان البريدي رقم الاتصال البريد الإلكتروني
1 جانيت جونز أنثى 21-07-1980 الشارع الأول قطعة رقم 4 حقيبة خاصة 0759-253-542 جانيتجونز@yagoo.cm
2 جانيت سميث جونز أنثى 23-06-1980 ميلروز 123 اغية اغية jj@fstreet.com
3 روبرت فيل ذكر 12-07-1989 الشارع الثالث 3 اغية 12345 rm@tstreet.com
4 غلوريا ويليامز أنثى 14-02-1984 الشارع الثاني 2 اغية اغية اغية
5 ليونارد هوفستاتر ذكر اغية وودكريست اغية 845738767 اغية
6 شيلدون كوبر ذكر اغية وودكريست اغية 976736763 اغية
7 راجيش كوثرابالي ذكر اغية وودكريست اغية 938867763 اغية
8 ليزلي وينكل ذكر 14-02-1984 وودكريست اغية 987636553 اغية
9 هوارد ولويتز ذكر 24-08-1981 ساوث بارك صندوق بريد P.O. Box 4563 987786553 اغية

فرز عمود واحد حسب الترتيب الافتراضي

لنفترض أننا نريد قائمة تُرتّب نتائج الاستعلام حسب حقل الجنس. يقوم البرنامج النصي أدناه بذلك دون تحديد اتجاه الترتيب.

SELECT * FROM `members` ORDER BY `gender`;
رقم العضوية الأسماء الكاملة جنس تاريخ الميلاد العنوان الفعلي العنوان البريدي رقم الاتصال البريد الإلكتروني
1 جانيت جونز أنثى 21-07-1980 الشارع الأول قطعة رقم 4 حقيبة خاصة 0759-253-542 جانيتجونز@yagoo.cm
2 جانيت سميث جونز أنثى 23-06-1980 ميلروز 123 اغية اغية jj@fstreet.com
4 غلوريا ويليامز أنثى 14-02-1984 الشارع الثاني 2 اغية اغية اغية
3 روبرت فيل ذكر 12-07-1989 الشارع الثالث 3 اغية 12345 rm@tstreet.com
5 ليونارد هوفستاتر ذكر اغية وودكريست اغية 845738767 اغية
6 شيلدون كوبر ذكر اغية وودكريست اغية 976736763 اغية
7 راجيش كوثرابالي ذكر اغية وودكريست اغية 938867763 اغية
8 ليزلي وينكل ذكر 14-02-1984 وودكريست اغية 987636553 اغية
9 هوارد ولويتز ذكر 24-08-1981 ساوث بارك صندوق بريد P.O. Box 4563 987786553 اغية

يتم عرض الأعضاء "الإناث" أولاً، يليهم الأعضاء "الذكور". وذلك لأنه عند استخدام عبارة ORDER BY دون تحديد ASC أو MySQL كلمة مفتاحية للوصف، MySQL يقوم بترتيب مجموعة نتائج الاستعلام بترتيب تصاعدي افتراضياً.

فرز عمودين في اتجاهين متعاكسين

لنلقِ نظرة الآن على مثال يقوم بـ الفرز باستخدام عمودينالعمود الأول هو فرز in ترتيب تصاعدي افتراضياً، بينما العمود الثاني هو فرز in تنازليا.

SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;

تنفيذ البرنامج النصي أعلاه في MySQL يعطي برنامج Workbench النتائج التالية عند استخدامه مع قاعدة بيانات myflixdb.

MySQL مثال على ترتيب البيانات حسب عمودين

تم فرز عمود الجنس تصاعديًا افتراضيًا، بينما تم فرز عمود تاريخ الميلاد تنازليًا بشكل صريح. ينطبق كل اتجاه على العمود الذي يليه فقط.

كيفية دمج عبارة ORDER BY مع عبارات WHERE وLIMIT وGROUP BY

نادراً ما تكون عبارة ORDER BY هي الشرط الوحيد في استعلام الإنتاج. MySQL يقوم دائماً بتقييم البنود بتسلسل ثابت، ومعرفة هذا التسلسل يفسر سبب ظهور النتائج بالشكل الذي تبدو عليه.

  1. من عند يقرأ الصفوف من الجدول.
  2. WHERE يتجاهل الصفوف التي لا تستوفي الشرط.
  3. GROUP BY يقوم بدمج الصفوف المتبقية في مجموعات، ويقوم HAVING بتصفية تلك المجموعات.
  4. ترتيب حسب قم بتسلسل الصفوف المتبقية.
  5. مما سيحدث يقوم بحذف العدد المطلوب من الصفوف من القائمة المصنفة.

لأن عبارة ORDER BY تعمل بعد WHERE و GROUP BY ولكن قبل LIMIT، فإن استعلامًا مثل "أصغر خمسة أعضاء من وودكريست" يتم التعبير عنه في عبارة واحدة.

SELECT full_names, date_of_birth FROM members
WHERE physical_address = 'Woodcrest'
ORDER BY date_of_birth DESC
LIMIT 5;

ينطبق الترتيب نفسه على النتائج المجمعة. القيم الإجمالية الناتجة عن وظائف مجمعة يمكن فرز البيانات مثل COUNT، بحيث ترتفع الفئة الأكثر ازدحامًا إلى أعلى التقرير.

SELECT gender, COUNT(*) AS members_count FROM members
GROUP BY gender
ORDER BY members_count DESC;

تلميح: يمكن استخدام عبارة ORDER BY للفرز حسب اسم مستعار للعمود، أو حسب تعبير، أو حتى حسب موضع العمود، مثل ORDER BY 3. لكن الفرز حسب الموضع غير مستقر، لأن إضافة عمود جديد إلى قائمة SELECT تُغير مفتاح الفرز تلقائيًا. لذا، يُنصح بتسمية العمود بدلًا من ذلك.

هناك نقطة أداء واحدة جديرة بالتذكر. عندما يحتوي العمود المصنف على فهرس، MySQL يمكن قراءة الصفوف بترتيب الفهرس وتجاوز عملية الفرز تمامًا. بدون فهرس، تُجبر الجداول الكبيرة على فرز الملفات في الذاكرة أو على القرص، وهو السبب المعتاد لبطء استعلام التقرير.

الأسئلة الشائعة

نعم، يمكن ذلك. بدون فهرس على العمود المصنف، MySQL يُجري عملية فرز الملفات على مجموعة النتائج بأكملها. إضافة فهرس يطابق عمود واتجاه ORDER BY يسمح للخادم بقراءة الصفوف بالترتيب وتجاوز تلك الخطوة.

عادةً لا. الترتيبات الافتراضية مثل utf8mb4_0900_ai_ci غير حساسة لحالة الأحرف، لذا يتم فرز "apple" و"Apple" معًا. أما الترتيب الثنائي أو _cs، أو ORDER BY BINARY column_name، فيُنتج ترتيبًا حساسًا لحالة الأحرف حيث تأتي الأحرف الكبيرة أولًا.

نعم. تقوم الدالة ORDER BY RAND() بخلط مجموعة النتائج، وهو أمر مفيد لاختيار فيلم أو عضو عشوائي. تقوم هذه الدالة بتقييم كل صف قبل الفرز، لذا يُنصح باستخدامها مع الدالة LIMIT وتجنبها في الجداول الكبيرة جدًا.

نعم. مساعدو الذكاء الاصطناعي المدمجون في أدوات مثل MySQL طاولة العمل حوّل طلبات اللغة العادية إلى عبارات SELECT مع ORDER BY. راجع دائمًا عمود الفرز واتجاهه، لأن الذكاء الاصطناعي لا يستطيع معرفة الترتيب المطلوب لتقريرك.

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

تلخيص هذه التدوينة بـ: