สั่งซื้อโดยใช้ลำดับความสำคัญที่กำหนดเองสำหรับคอลัมน์ข้อความ


12

นี่คือตารางตัวอย่าง:

name | cat
----------
hugo | sal
bob  | mgr
mike | dev
jeff | mgr
john | dev

ทั้งสองnameและcatเป็น Varchar

cat แสดงหมวดหมู่สำหรับชื่อเหล่านี้ แต่ฉันต้องการกำหนดลำดับความสำคัญให้กับพวกเขาตามด้วยข้อความค้นหาเพื่อแสดงรายการทั้งหมดเรียงลำดับตามลำดับความสำคัญนี้

วิธีใดบ้างที่เป็นไปได้? ฉันสามารถแยกcatตารางที่สองสร้าง foreign foreign และอื่น ๆ แต่เนื่องจากแอปของฉันนั้นง่ายมากและโครงสร้างอาจไม่สามารถเปลี่ยนแปลงได้: ฉันมีความเป็นไปได้อะไรบ้างในการmgrระบุชื่อก่อนตามด้วยdevชื่อตามด้วยsalชื่อ ?

คำตอบ:


20

สมมติว่าคุณไม่สามารถเปลี่ยนโครงสร้างของคุณคุณสามารถใช้คำสั่ง CASE ในการสั่งซื้อโดย:

ORDER BY case cat when 'mgr' then 1 when 'dev' then 2 else 3

อย่างไรก็ตามหากคุณสามารถเปลี่ยนโครงสร้างของคุณคุณสามารถสร้างCategoryตารางรวมถึงรหัสหมวดหมู่และการจัดอันดับเข้าร่วมตารางตัวอย่างของคุณลงในCategoryตารางและจัดเรียงตามการจัดอันดับนี้


3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

โครงสร้างนี้ช่วยฉันใน Wordpress ตัวอย่างเช่นการเลือกโพสต์ที่กำหนดเองก่อนอื่น ๆ : โปสเตอร์และโครงการเป็นแบบกำหนดเองที่เลือกpost_typeจากการwp_postsสั่งซื้อตาม (กรณีเมื่อpost_type= 'โปสเตอร์' แล้ว 1 เมื่อpost_type= 'โครงการ' แล้ว 2 อีก 3 ปลาย)


โปรดทราบว่าก) วงเล็บเหลี่ยมเป็นทางเลือก: การcase แสดงออก (ตามที่เรียกว่า) นี้ใช้ได้ทุกที่ที่คอลัมน์สามารถระบุได้; และ b) การแสดงออกสามารถทำให้ง่ายขึ้นเล็กน้อยcase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.