Problemer med din forespørgsel:
- Du kan ikke bruge
range
i WHERE-klausulen. Det er et alias og vil kun blive defineret, efter at WHERE-sætningen er udført. - Selv om du kunne bruge det, giver det ingen mening at sammenligne et tal med et sæt tal ved hjælp af
<>
. Generelt kan du brugeIN(...)
, men i dit særlige tilfælde skal du brugeBETWEEN 100000 and 999999
og undgå behovet for enRANGE
fungere. - Hvis du kun vil have ét tal, skal grænsen være 1, ikke noget tilfældigt. Normalt for at vælge tilfældige elementer bruger du
ORDER BY RAND()
.
Prøv at bruge denne forespørgsel:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Hvis du vil finde et tal, der ikke er i din tabel, og de tilgængelige tal ikke er tæt på udtømning (f.eks. er mindre end 80 % tildelt), ville en god fremgangsmåde være at generere tilfældige tal og kontrollere, om de er tildelt, indtil du finder et, der ikke er 't.
Der findes muligvis en ren MySQL-løsning, men jeg tror, den har brug for nogle snoede joinforbindelser, tilfældige og modulus.