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

Truy vấn MySQL chọn 1 hàng cụ thể và 1 hàng ngẫu nhiên

Để lấy 1 hàng cố định (theo ID) và thêm hàng ngẫu nhiên, dùng ORDER BY (Id = target) DESC, RAND().

Ví dụ minh họa

Tạo bảng 7 hàng:

CREATE TABLE oneSpecificRowAndOtherRandom (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20)
);

INSERT INTO oneSpecificRowAndOtherRandom (Name) VALUES
('Larry'), ('Sam'), ('Mike'), ('Carol'), ('Chris'), ('Bob'), ('David');

Dữ liệu:

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Larry |
| 2  | Sam   |
| 3  | Mike  |
| 4  | Carol |
| 5  | Chris |
| 6  | Bob   |
| 7  | David |
+----+-------+

Lấy hàng Id=5 (Chris) + 2 hàng ngẫu nhiên khác (tổng 3 hàng):

SELECT * FROM oneSpecificRowAndOtherRandom
ORDER BY (Id = 5) DESC, RAND()
LIMIT 0, 3;

Kết quả lần 1:

+----+-------+
| Id | Name  |
+----+-------+
| 5  | Chris |
| 1  | Larry |
| 2  | Sam   |
+----+-------+

Kết quả lần 2 (chạy lại, random thay đổi):

+----+-------+
| Id | Name  |
+----+-------+
| 5  | Chris |
| 2  | Sam   |
| 4  | Carol |
+----+-------+

Giải thích:

  • (Id = 5) trả về 1 (TRUE) cho hàng Id=5, 0 (FALSE) cho hàng khác.
  • DESC đưa TRUE (1) lên đầu → hàng Id=5 luôn ở đầu.
  • RAND() sắp xếp ngẫu nhiên cho các hàng còn lại (FALSE = 0).
  • LIMIT 0, 3 lấy 3 hàng đầu (1 cố định + 2 random).

Lưu ý: RAND() không dùng index, chậm trên bảng lớn. Cân nhắc các phương pháp random hiệu quả hơn (ví dụ: random ID trong range, TABLESAMPLE...).