SELECT Bereich von ganzen Zahlen in MySQL. Z.B. 1,2,3,4, ..., n;

8

Ich muss den Bereich der ganzen Zahl in MySQL auswählen. So etwas Ähnliches

SELECT RANGE(10,20) AS range;

gibt

zurück

10, 11, 12, 13, 14, ..., 20

Warum?
Ich möchte eine zufällige Telefonnummer aus dem Bereich auswählen, der noch nicht registriert ist. Das ist eine Idee.

SELECT RANGE(100000,999999) AS range FROM phone WHERE phoneNum <> range LIMIT FLOOR(100000 + RAND()*(899999);

    
cervenak 08.12.2010, 10:26
quelle

2 Antworten

8

Probleme mit Ihrer Abfrage:

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

Versuchen Sie es mit dieser Abfrage:

%Vor%

Wenn Sie eine Nummer suchen möchten, die nicht in Ihrer Tabelle enthalten ist und die verfügbaren Zahlen nicht knapp sind (sagen wir weniger als 80%), wäre es ein guter Ansatz, Zufallszahlen zu erzeugen und zu prüfen, ob sie zugewiesen sind eine, die nicht ist.

Eine reine MySQL-Lösung existiert vielleicht, aber ich denke, sie benötigt einige verdrehte Joins, Random und Modul.

    
Alin Purcaru 08.12.2010 10:36
quelle
0

Eine Alternative:

Erstellen Sie zuerst eine Tabelle mit nur Zahlen, die alle Zahlen von 1 bis MAX_NUM enthält.

Verwenden Sie dann diese Abfrage:

%Vor%

Auf diese Weise können Sie auch mehrere Zahlen relativ schnell erhalten, indem Sie den Grenzwert ändern.

    
Alin Purcaru 08.12.2010 11:09
quelle

Tags und Links