Các vấn đề với truy vấn của bạn:
- Bạn không thể sử dụng
range
trong mệnh đề WHERE. Nó là một bí danh và sẽ chỉ được xác định sau khi mệnh đề WHERE được thực hiện. - Ngay cả khi bạn có thể sử dụng nó, sẽ không có ý nghĩa gì nếu so sánh một số với một tập hợp số bằng
<>
. Nói chung, bạn có thể sử dụngIN(...)
, nhưng trong trường hợp cụ thể của bạn, bạn nên sử dụngBETWEEN 100000 and 999999
và tránh cần phải cóRANGE
hàm số. - Nếu bạn chỉ muốn một số thì giới hạn phải là 1, không phải là một cái gì đó ngẫu nhiên. Thông thường để chọn các mục ngẫu nhiên, bạn sử dụng
ORDER BY RAND()
.
Hãy thử sử dụng truy vấn này:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Nếu bạn muốn tìm một số không có trong bảng của mình và các số có sẵn không gần cạn (giả sử chỉ định ít hơn 80%) thì cách tiếp cận tốt là tạo các số ngẫu nhiên và kiểm tra xem chúng có được chỉ định hay không cho đến khi bạn tìm thấy một 't.
Một giải pháp MySQL thuần túy có thể tồn tại nhưng tôi nghĩ nó cần một số liên kết xoắn, ngẫu nhiên và mô-đun.