Để 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, 3lấ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...).