Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

กำหนดค่าคอลัมน์เฉพาะคงที่ ส่วนที่เหลือสุ่มลำดับใน MySQL

ใช้ ORDER BY (เงื่อนไข) DESC, RAND() เพื่อ "ปักหมุด" แถวที่ตรงเงื่อนไขไว้หน้าสุด ส่วนอื่นสุ่ม

ตัวอย่างการใช้งาน

สร้างตารางตัวเลข:

mysql> create table DemoTable1921 (Number int);

เพิ่มข้อมูล:

mysql> insert into DemoTable1921 values(40),(80),(820),(10);

ดูข้อมูลทั้งหมด:

mysql> select * from DemoTable1921;
+--------+
| Number |
+--------+
|     40 |
|     80 |
|    820 |
|     10 |
+--------+
4 rows in set (0.00 sec)

คิวรี: คงที่ 40 ไว้บนสุด ส่วนอื่นสุ่ม

mysql> select * from DemoTable1921 
    -> order by (Number=40) desc, rand();

ผลลัพธ์ตัวอย่าง:

+--------+
| Number |
+--------+
|     40 |
|    820 |
|     10 |
|     80 |
+--------+
4 rows in set (0.00 sec)

คำอธิบาย

  • (Number=40) คืนค่า 1 (TRUE) สำหรับแถวที่เป็น 40, 0 (FALSE) สำหรับอื่นๆ
  • DESC เรียงจาก 1 ไป 0 → แถวที่เป็น 40 อยู่บนสุด
  • RAND() เรียงสุ่มสำหรับแถวที่เหลือ (ค่า 0 เท่ากัน)
  • ใช้ได้กับหลายเงื่อนไข: ORDER BY (col='A') DESC, (col='B') DESC, RAND()

ประโยชน์: แสดงรายการ "แนะนำ" หรือ "โปรโมชั่น" ไว้บนสุด ส่วนอื่นสุ่มเพื่อความหลากหลาย