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

จะระบุลำดับที่แน่นอนด้วย WHERE `id` IN (…) ใน MySql ได้อย่างไร


หากต้องการระบุลำดับที่แน่นอนด้วยตำแหน่ง id IN คุณต้องใช้ฟังก์ชัน find_in_set()

ไวยากรณ์มีดังนี้

SELECT *FROM yourTableNameWHERE yourColumnName IN (yourValue1,yourValue2,yourValue3,....N)ORDER BY FIND_IN_SET(yourColumnName , 'yourValue1,yourValue2,yourValue3,....N'');

เรามาสร้างตารางกันก่อน

mysql> สร้างตาราง FindInSetDemo -> ( -> Id int, -> Name varchar(20), -> Age int -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.54 วินาที)

แทรกบางระเบียนในตารางโดยใช้คำสั่ง insert

แบบสอบถามมีดังนี้

mysql> แทรกลงในค่า FindInSetDemo (10,'John', 23); ตกลง แบบสอบถาม 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงในค่า FindInSetDemo (1,'Carol', 21); ตกลง 1 แถว ได้รับผลกระทบ (0.17 วินาที) mysql> แทรกลงในค่า FindInSetDemo (4,'Bob',25); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า FindInSetDemo (6, 'Sam', 26); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที) mysql> แทรกลงในค่า FindInSetDemo (7, 'Maxwell', 29); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.18 วินาที) mysql> แทรกลงในค่า FindInSetDemo (8, 'Mike', 22); แบบสอบถาม ตกลง 1 แถวได้รับผลกระทบ (0.13 วินาที)mysql> แทรกลงในค่า FindInSetDemo (2,'David',27); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงในค่า FindInSetDemo (3, 'James', 20);แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.20 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select

แบบสอบถามมีดังนี้

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

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+------+---------+------+| รหัส | ชื่อ | อายุ |+------+---------+------+| 10 | จอห์น | 23 || 1 | แครอล | 21 || 4 | บ๊อบ | 25 || 6 | แซม | 26 || 7 | แม็กซ์เวลล์ | 29 || 8 | ไมค์ | 22 || 2 | เดวิด | 27 || 3 | เจมส์ | 20 |+------+---------+------+8 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อระบุลำดับที่แน่นอนกับที่ id IN()

mysql> เลือก *จาก FindInSetDemo -> โดยที่ Id IN (1,4,6,7) -> เรียงลำดับโดย FIND_IN_SET(Id, '1,4,6,7');

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+------+---------+------+| รหัส | ชื่อ | อายุ |+------+---------+------+| 1 | แครอล | 21 || 4 | บ๊อบ | 25 || 6 | แซม | 26 || 7 | แม็กซ์เวลล์ | 29 |+------+---------+------+4 แถวในชุด (0.00 วินาที)