Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp theo vị trí từ khóa trong chuỗi MySQL với ORDER BY INSTR()

Giới thiệu

Hàm INSTR(str, substr) trả về vị trí (1-based) của lần xuất hiện đầu tiên của substr trong str. Nếu không tìm thấy trả về 0. Dùng trong ORDER BY để ưu tiên hàng có từ khóa xuất hiện sớm hơn.

Ví dụ thực hành

1. Tạo bảng DemoTable822

mysql> CREATE TABLE DemoTable822 (Word TEXT);

2. Chèn dữ liệu

mysql> INSERT INTO DemoTable822 VALUES ('Forever'),('ever'),('every'),('everyday');

3. Tìm từ chứa 'ever' và sắp xếp theo vị trí 'ever'

mysql> SELECT * FROM DemoTable822 
    WHERE Word LIKE '%ever%' 
    ORDER BY INSTR(Word, 'ever'), Word;

4. Kết quả

+----------+
| Word     |
+----------+
| ever     |      -- vị trí 1
| every    |      -- vị trí 1
| everyday |      -- vị trí 1
| Forever  |      -- vị trí 4
+----------+

Giải thích

  • INSTR('ever', 'ever') = 1.
  • INSTR('Forever', 'ever') = 4.
  • Sắp xếp thứ cấp , Word để ổn định thứ tự cho cùng vị trí.

Cách hiện đại (MySQL 8.0+): Window Function

SELECT Word, INSTR(Word, 'ever') AS pos
FROM DemoTable822
WHERE Word LIKE '%ever%'
ORDER BY pos, Word;

Lưu ý

  • INSTR phân biệt chữ hoa/thường theo collation. Dùng LOWER() nếu cần không phân biệt: INSTR(LOWER(Word), 'ever').
  • Không dùng index → full scan. Dữ liệu lớn → Full-Text Search hoặc search engine.
  • LOCATE(substr, str) tương tự INSTR nhưng đổi thứ tự đối số.