Problèmes avec votre requête :
- Vous ne pouvez pas utiliser
range
dans la clause WHERE. Il s'agit d'un alias et ne sera défini qu'après l'exécution de la clause WHERE. - Même si vous pouviez l'utiliser, cela n'a aucun sens de comparer un nombre avec un ensemble de nombres en utilisant
<>
. En général, vous pouvez utiliserIN(...)
, mais dans votre cas particulier, vous devez utiliserBETWEEN 100000 and 999999
et éviter le besoin d'unRANGE
fonction. - Si vous ne voulez qu'un seul numéro, la limite doit être 1, pas quelque chose d'aléatoire. Habituellement, pour sélectionner des éléments aléatoires, vous utilisez
ORDER BY RAND()
.
Essayez d'utiliser cette requête :
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Si vous voulez trouver un nombre qui n'est pas dans votre table et que les nombres disponibles ne sont pas proches de l'épuisement (disons que moins de 80 % sont attribués), une bonne approche serait de générer des nombres aléatoires et de vérifier s'ils sont attribués jusqu'à ce que vous en trouviez un qui n'est pas c'est.
Une solution MySQL pure peut exister mais je pense qu'elle a besoin de quelques jointures torsadées, aléatoires et modulées.