Problemi con la tua richiesta:
- Non puoi utilizzare
range
nella clausola WHERE. È un alias e verrà definito solo dopo l'esecuzione della clausola WHERE. - Anche se potessi usarlo, non ha senso confrontare un numero con un insieme di numeri usando
<>
. In generale potresti usareIN(...)
, ma nel tuo caso particolare dovresti usareBETWEEN 100000 and 999999
ed evita la necessità di unRANGE
funzione. - Se vuoi solo un numero, il limite dovrebbe essere 1, non qualcosa di casuale. Di solito per selezionare oggetti casuali usi
ORDER BY RAND()
.
Prova a utilizzare questa query:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Se vuoi trovare un numero non nella tua tabella e i numeri disponibili non sono prossimi all'esaurimento (diciamo che è stato assegnato meno dell'80%) un buon approccio sarebbe generare numeri casuali e controllare se sono assegnati finché non ne trovi uno che è non.
Può esistere una soluzione MySQL pura, ma penso che necessiti di unioni contorte, casuali e moduli.