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

เป็นไปได้ไหมที่จะแบ่งเร็กคอร์ดทั้งในลำดับจากน้อยไปมากและจากมากไปน้อยใน MySQL และแสดงทางเลือกอื่น?


ใช่ คุณสามารถดำเนินการนี้ใน MySQL ได้โดยรับค่ากลางก่อน ให้เราสร้างตารางก่อน:

mysql> สร้างตาราง DemoTable ( UserId int ไม่ใช่ NULL AUTO_INCREMENT PRIMARY KEY) เคียวรีตกลง 0 แถวได้รับผลกระทบ (0.65 วินาที)

ต่อไปนี้เป็นแบบสอบถามเพื่อแทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก:

mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.14 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.10 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.08 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.16 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.10 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.10 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถว ได้รับผลกระทบ (0.07 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.06 วินาที) mysql> แทรกลงในค่า DemoTable (); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.10 วินาที)

ต่อไปนี้เป็นแบบสอบถามเพื่อแสดงระเบียนจากตารางโดยใช้คำสั่ง select:

mysql> เลือก *จาก DemoTable;

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้

<ก่อนหน้า>+---------+| รหัสผู้ใช้ |+---------+| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 |+-------+10 แถวในชุด (0.00 วินาที)

นี่คือการสืบค้นเพื่อให้ได้ค่ากลางก่อน:

mysql> set @middleValue=(select max(UserId) จาก DemoTable)/2;Query OK, 0 แถวได้รับผลกระทบ (0.01 วินาที)

ตอนนี้ ให้เราหาค่าของคำสั่งจากน้อยไปมากและจากมากไปหาน้อยแทน:

mysql> เลือก *จาก DemoTable ORDER BY (IF(UserId <@middleValue,@middleValue*2-UserId,UserId-1)) DESC,UserId ASC;

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้

<ก่อนหน้า>+---------+| รหัสผู้ใช้ |+---------+| 1 || 10|| 2 || 9 || 3 || 8 || 4 || 7 || 6 || 5 |+-------+10 แถวในชุด (0.00 วินาที)