Sử dụng MySQL ORDER BY để sắp xếp dữ liệu bằng danh sách tùy chỉnh
I. Giới thiệu
Mệnh đề ORDER BY trong MySQL được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần, giảm dần hoặc chuỗi theo thứ tự bảng, ngày tháng ... dựa trên một hoặc nhiều cột.
Một số cơ sở dữ liệu sắp xếp các kết quả truy vấn theo thứ tự tăng dần theo mặc định. ASC Command được sử dụng để sắp xếp tăng dần và DESC được sử dụng để sắp xếp giảm dần.
Tuy nhiên trong 1 số trường hợp khách hàng có thể yêu cầu hơi phi logic, ví dụ như bình thường chúng ta sẽ sắp xếp danh sách các quốc gia theo bảng chữ cái tuy nhiên khách hàng muốn đưa 1 số quốc gia phổ biến lên đầu . Như vậy lúc này không sắp xếp theo ASC hay DESC dựa trên một số cột để hiển thị đúng ý khách hàng. Vậy làm thế nào? Chúng ta cùng xem ví dụ sau nhé!
II. Thực hành
- Bảng tạo ta đầu tiên
CREATE TABLE `t_tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tag_name` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL,
`key` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
2. Thêm mẫu dữ liệu
INSERT INTO t_tags (tag_name,`key`,created_at,updated_at) VALUES
('Accountant','A','2020-11-27 08:15:25.0','2021-03-11 17:25:37.0'),
('Architect','A','2020-11-27 08:15:25.0','2021-03-11 17:25:39.0'),
('Doctor','D','2020-11-27 08:15:25.0','2021-03-11 17:26:11.0'),
('Electrician','E','2020-11-27 08:15:25.0','2021-03-11 17:26:13.0'),
('Engineer','E','2020-11-27 08:15:25.0','2021-03-11 17:26:15.0'),
('Factory worker','F','2020-11-27 08:15:25.0','2021-03-11 17:26:17.0');
3. Template data query

-> Theo default, id thứ tự theo từ nhỏ đến lớn.
- Mình sẽ sắp xếp theo 1 thứ tự do mình đặt theo ID là "3,2,4,5,1,6" và sử dụng hàm FIELD trong Mysql và kết quả như sau:

- Hàm FIELD sẽ tìm vị trí id trong sắp xếp chuỗi, giống như tìm giá trị trong mảng trả về vị trí chỉ mục, tuy nhiên các phần tử đầu tiên sẽ bắt đầu bằng 1:

III. Tài liệu tham khảo
