Masalah dengan kueri Anda:
- Anda tidak dapat menggunakan
range
dalam klausa WHERE. Ini adalah alias dan hanya akan ditentukan setelah klausa WHERE dijalankan. - Bahkan jika Anda bisa menggunakannya, tidak masuk akal untuk membandingkan angka dengan sekumpulan angka menggunakan
<>
. Secara umum Anda dapat menggunakanIN(...)
, tetapi dalam kasus tertentu Anda harus menggunakanBETWEEN 100000 and 999999
dan hindari kebutuhan akanRANGE
fungsi. - Jika Anda hanya ingin satu nomor maka batasnya harus 1, bukan sesuatu yang acak. Biasanya untuk memilih item acak Anda menggunakan
ORDER BY RAND()
.
Coba gunakan kueri ini:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Jika Anda ingin menemukan nomor yang tidak ada di tabel Anda dan nomor yang tersedia tidak mendekati penipisan (katakanlah kurang dari 80% ditetapkan), pendekatan yang baik adalah membuat nomor acak dan memeriksa apakah nomor tersebut ditetapkan sampai Anda menemukan nomor yang tidak. 't.
Solusi MySQL murni mungkin ada tetapi saya pikir itu membutuhkan beberapa gabungan yang bengkok, acak dan modulus.