Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie einen Bereich von Ganzzahlen in MySQL aus. Z.B. 1,2,3,4,...,n;

Probleme mit Ihrer Anfrage:

  1. Sie können range nicht verwenden in der WHERE-Klausel. Es ist ein Alias ​​und wird erst definiert, nachdem die WHERE-Klausel ausgeführt wurde.
  2. Auch wenn Sie es gebrauchen könnten, macht es keinen Sinn, eine Zahl mit einem Satz von Zahlen zu vergleichen, indem Sie <> verwenden . Im Allgemeinen könnten Sie IN(...) verwenden , aber in Ihrem speziellen Fall sollten Sie BETWEEN 100000 and 999999 verwenden und vermeiden Sie die Notwendigkeit eines RANGE Funktion.
  3. Wenn Sie nur eine Zahl wollen, dann sollte das Limit 1 sein, nicht etwas Zufälliges. Um zufällige Artikel auszuwählen, verwenden Sie normalerweise ORDER BY RAND() .

Versuchen Sie es mit dieser Abfrage:

SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1

Wenn Sie eine Zahl finden möchten, die nicht in Ihrer Tabelle enthalten ist, und die verfügbaren Zahlen nicht annähernd erschöpft sind (z. B. weniger als 80 % zugewiesen sind), wäre ein guter Ansatz, Zufallszahlen zu generieren und zu prüfen, ob sie zugewiesen sind, bis Sie eine finden, die keine ist nicht.

Eine reine MySQL-Lösung mag existieren, aber ich denke, sie braucht einige Twisted Joins, Random und Modulus.