قم بالفرز باستخدام خيار واحد مجبر على أعلى القائمة

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

  •  01-07-2019
  •  | 
  •  

سؤال

لدي تطبيق PHP يعرض قائمة بالخيارات للمستخدم.يتم إنشاء القائمة من استعلام بسيط مقابل SQL 2000.ما أود فعله هو وضع خيار محدد في أعلى القائمة، ثم ترتيب الخيارات المتبقية أبجديًا.

على سبيل المثال، إليك الخيارات إذا تم ترتيبها أبجديًا:

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto  

ما أود أن تكون القائمة هو أكثر من هذا:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto  

هل هناك طريقة يمكنني من خلالها القيام بذلك باستخدام استعلام واحد؟أم أنني عالق في تشغيل الاستعلام مرتين وإلحاق النتائج؟

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

المحلول

SELECT name
FROM locations
ORDER BY
    CASE
        WHEN name = 'Montreal' 
        THEN 0
        ELSE 1
    END, name

نصائح أخرى

SELECT name FROM options ORDER BY name = "Montreal", name;

ملحوظة:يعمل هذا مع MySQL، وليس SQL 2000 كما طلب OP.

create table Places (
    add Name varchar(30),
    add Priority bit
)

select   Name
from     Places
order by Priority desc,
         Name

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

بلدي الحل:

لدي حقل "الاسم" وهو ما يتم عرضه.لدي أيضًا حقل "NameSorted" يُستخدم في جميع الاستعلامات ولكن لا يتم عرضه أبدًا.تهتم واجهة مستخدم الإدخال الخاصة بي بتحويل "الأخير، الأول" الذي تم إدخاله في حقل الفرز إلى إصدار العرض تلقائيًا.

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

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

انقر فوق ملف التعريف الخاص بي لرؤية موقع الويب الناتج.

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