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

MySQL: เรียงลำดับตามตำแหน่งคำที่เจอ (INSTR)

การใช้ INSTR() สำหรับเรียงตามตำแหน่งคำ

ฟังก์ชัน INSTR(str, substr) คืนตำแหน่งแรกที่พบ substr ใน str (1-based) ใช้ใน ORDER BY เพื่อให้คำที่เจอเร็ว/อยู่หน้าขึ้นก่อน

ตัวอย่าง

mysql> create table DemoTable822(Word text);
Query OK, 0 rows affected (1.11 sec)
mysql> insert into DemoTable822 values('Forever');
mysql> insert into DemoTable822 values('ever');
mysql> insert into DemoTable822 values('every');
mysql> insert into DemoTable822 values('everyday');

ค้นหาคำที่มี 'ever' และเรียงตามตำแหน่งที่เจอ

mysql> select * from DemoTable822 
where Word LIKE '%ever%' 
order by INSTR(Word, 'ever'), Word;

ผลลัพธ์:

+----------+
| Word     |
+----------+
| ever     |      -- เจอตำแหน่ง 1
| every    |      -- เจอตำแหน่ง 1
| everyday |      -- เจอตำแหน่ง 1
| Forever  |      -- เจอตำแหน่ง 4
+----------+

คำอธิบาย

  • INSTR('ever', 'ever') = 1
  • INSTR('every', 'ever') = 1
  • INSTR('everyday', 'ever') = 1
  • INSTR('Forever', 'ever') = 4
  • , Word เรียงรองแบบอักษรสำหรับที่ตำแหน่งเท่ากัน

ฟังก์ชันที่เกี่ยวข้อง

  • LOCATE(substr, str) - เหมือน INSTR แต่สลับอาร์กิวเมนต์ (Standard SQL)
  • POSITION(substr IN str) - ANSI SQL Standard

สรุป

ใช้ ORDER BY INSTR(column, 'keyword') เรียงให้คำที่เจอคำค้นหาเร็วขึ้น (อยู่หน้า) ขึ้นก่อน