sql >> Database >  >> RDS >> Mysql

SELECT bereik van gehele getallen in MySQL. bijv. 1,2,3,4,...,n;

Problemen met uw vraag:

  1. Je kunt range niet gebruiken in de WHERE-clausule. Het is een alias en wordt alleen gedefinieerd nadat de WHERE-component is uitgevoerd.
  2. 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 je IN(...) . kunnen gebruiken , maar in uw specifieke geval moet u BETWEEN 100000 and 999999 . gebruiken en vermijd de noodzaak van een RANGE functie.
  3. 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.



  1. Hoe kan ik WHERE 1 emuleren in een dynamische query?

  2. WAMP Server V 2.5-pictogram is oranje, reageert niet en geen menu

  3. PHP-fout krijgen Waarschuwing:fputcsv() verwacht dat parameter 2 array is

  4. MYSQL laatste login en aantal logins in laatste 3 maanden