Sử dụng MySQL ORDER BY để sắp xếp dữ liệu bằng danh sách tùy chỉnh

mysql Apr 07, 2021

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

  1. 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

MySQL ORDER BY
This tutorial shows you how to use the MySQL ORDER BY clause to sort rows in the result set by one or more columns in ascending or descending order.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.