Problem med din fråga:
- Du kan inte använda
range
i WHERE-klausulen. Det är ett alias och kommer bara att definieras efter att WHERE-satsen har utförts. - Även om du skulle kunna använda det, är det meningslöst att jämföra ett tal med en uppsättning siffror med
<>
. I allmänhet kan du användaIN(...)
, men i ditt speciella fall bör du användaBETWEEN 100000 and 999999
och undvik behovet av enRANGE
fungera. - Om du bara vill ha ett nummer ska gränsen vara 1, inte något slumpmässigt. Vanligtvis för att välja slumpmässiga objekt använder du
ORDER BY RAND()
.
Testa att använda den här frågan:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Om du vill hitta ett nummer som inte finns i din tabell och de tillgängliga numren inte är nära utarmning (säg att mindre än 80 % är tilldelade) skulle ett bra tillvägagångssätt vara att generera slumptal och kontrollera om de är tilldelade tills du hittar ett som inte 't.
En ren MySQL-lösning kan existera men jag tror att den behöver några vridna kopplingar, slumpmässigt och modul.