Problemas con su consulta:
- No puedes usar
range
en la cláusula WHERE. Es un alias y solo se definirá después de que se ejecute la cláusula WHERE. - Incluso si pudiera usarlo, no tiene sentido comparar un número con un conjunto de números usando
<>
. En general, podría usarIN(...)
, pero en tu caso particular deberías usarBETWEEN 100000 and 999999
y evitar la necesidad de unRANGE
función. - Si solo desea un número, el límite debe ser 1, no algo aleatorio. Por lo general, para seleccionar elementos aleatorios se utiliza
ORDER BY RAND()
.
Intenta usar esta consulta:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Si quiere encontrar un número que no está en su tabla y los números disponibles no están cerca de agotarse (digamos que menos del 80 % están asignados), un buen enfoque sería generar números aleatorios y verificar si están asignados hasta que encuentre uno que sí lo esté. 't.
Es posible que exista una solución MySQL pura, pero creo que necesita algunas uniones retorcidas, aleatorias y de módulo.