مشكلة مع ترتيب MySQL بواسطة - هل يمكنني استخدام Natsort لإصلاحه؟

StackOverflow https://stackoverflow.com/questions/2173961

  •  24-09-2019
  •  | 
  •  

سؤال

أحتاج إلى استخدام الفرز الطبيعي مع نتيجة MySQL لأنه يقوم حاليًا بفرز قيم int الخاصة بي على النحو التالي:

  • 1
  • 123
  • 1256
  • 22
  • 231

إلخ

بينما سأحتاج إلى فرز مثل

  • 1
  • 22
  • 231
  • 1256

أعرف وظيفة "Natsort" ، لكنها لا تعمل مع نتيجة استعلام MySQL. كيف يمكنني الفرز (بشكل طبيعي) ، هل من الممكن القيام بذلك في الاستعلام؟

شكرا للمساعدة!

تحرير: مثال استعلام $result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

لست متأكدًا تمامًا مما إذا كان استخدامي لـ DESC يكون صحيحًا ، لكنه لا يرمي خطأ لذلك يجب أن يكون جيدًا. لسوء الحظ ، يبدو أن تغيير DESC إلى ASC ليس له أي تأثير ...

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

المحلول

الاستعلام الذي نشرته هناك هو فرز عن طريق تعبير سلسلة ثابتة ، بدلاً من اسم العمود أو موضعه. إما استخدام backticks للاقتباس ، أو إخراج الاقتباسات:

SELECT * FROM forums ORDER BY `posts` DESC

أو ربما

SELECT * FROM forums ORDER BY posts DESC

من شأنه أن يفسر لماذا التغيير بين ASC و DESC ليس له أي تأثير.

كان الجواب الأولي:

يشير ترتيب الفرز الذي تصفه إلى أن قيم int يتم تخزينها بالفعل كنوع حرف (أو ربما يتم تحويلها إلى حرف قبل الفرز).

تحقق مما إذا كنت تقوم بتخزين البيانات في نوع الرقم أو الحرف. إذا أمكن ، استخدم نوعًا رقميًا ، فسيكون ترتيب الفرز الطبيعي كما تحتاج. اذا أنت لا يمكن قم بتغيير نوع البيانات الأساسي ليكون INT ، ثم يمكنك القيام بذلك في استعلامك (على سبيل المثال باستخدام يقذف) ، ربما بتكلفة الأداء.

نصائح أخرى

إذا كانت المنشورات عمودًا غير INT ، فيمكنك تجربة هذا:

SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC

إلقاء نظرة أيضًا على http://drupal.org/project/natsort. هذه وحدة Drupal يمكن استخدامها لتسهيل فرز MySQL.

هذا السؤال لديه إجابة لـ MySQL التي استخدمتها.

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