Problemen met uw vraag:
- Je kunt
range
niet gebruiken in de WHERE-clausule. Het is een alias en wordt alleen gedefinieerd nadat de WHERE-component is uitgevoerd. - Zelfs als je het zou kunnen gebruiken, heeft het geen zin om een getal te vergelijken met een reeks getallen met behulp van
<>
. In het algemeen zou jeIN(...)
. kunnen gebruiken , maar in uw specifieke geval moet uBETWEEN 100000 and 999999
. gebruiken en vermijd de noodzaak van eenRANGE
functie. - Als je maar één getal wilt, moet de limiet 1 zijn, niet iets willekeurigs. Gewoonlijk gebruik je om willekeurige items te selecteren
ORDER BY RAND()
.
Probeer deze zoekopdracht te gebruiken:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Als u een nummer wilt vinden dat niet in uw tabel staat en de beschikbare nummers zijn niet bijna uitgeput (zeg dat er minder dan 80% is toegewezen), zou een goede benadering zijn om willekeurige nummers te genereren en te controleren of ze zijn toegewezen totdat u er een vindt die dat wel is. 't.
Er bestaat misschien een pure MySQL-oplossing, maar ik denk dat er wat verdraaide joins voor nodig zijn, willekeurig en modulus.