phpbar.de logo

Mailinglisten-Archive

[php] =?ISO-8859-1?B?UmU6IFtwaHBdIEz8Y2tlbiBpbiBlaW5lbSBXZXJ0ZWJlcmVp Y2ggZmlu?= =?ISO-8859-1?B?ZGVu?=

[php] Re: [php] Lücken in einem Wertebereich fin den

robs-info php_(at)_phpcenter.de
Fri, 13 Sep 2002 13:32:50 +0200


I.Garbe schrieb:


> Hallo,

> die Frage wurde zwar in ähnlicher Form schon behandelt, aber hat für 
> mich keine verwendbare Lösung gebracht, deswegen ein neuer Versuch:

> Ich möchte eine Benutzerdatenbank verwalten, in der neben den 
> Benutzerdaten auch eine IP-Adresse gespeichert wird. Es kann allerdings 
> durchaus sein, dass eine IP gelöscht und für einen anderen Benutzer neu 
> vergeben werden soll. Wenn ich eine Reihe von IPs habe, entstehen also 
> Lücken, die neu vergeben werden sollen. Da ich mit einem Klasse-C 
> Netzwerk arbeite, habe ich nur 254 IPs zur Verfügung, die ziemlich 
> rationell vergeben werden sollen.

> Meine Frage: Wie komme ich an die nächstbeste Lücke, wenn ich einen neue 
> IP vegeben will? Und welches ist die schnellste Möglichkeit?
> SELECT MAX(ip) ... fällt schon mal raus, da die Lücken nicht 
> berücksichtigt werden.
> Ich könnte natürlich alle IPs erst mal in ein Array laden und dann die 
> IPs durchlaufen lassen und überprüfen, ob die gerade aktuelle IP schon 
> im Array vorkommt, also vergeben ist. Aber ist das die schnellste und 
> einfachste Möglichkeit?

> Auch wenn ich keine IPs habe, sondern einfache Ganzzahlen, die aber 
> beschränkt sind auf eine vorher festgelegte Anzahl, wie finde ich da die 
> Lücken? Die Routine auf IPs umzuschreiben dürfte kein Problem sein, aber 
> ein Lösungsansatz wäre ganz praktisch.

> Hat jemand eine Idee?

Man nehme an Tebelle ist test mit Feld IP (numerisch)

SELECT
MIN(a.ip+1) AS kleinste_freie_ip
FROM
test a
LEFT JOIN test b
ON a.ip+1=b.ip
WHERE
b.ip IS NULL

Mit dieser Methode "schiebt" sich der freie Bereich allerdings immer
weiter nach oben, da ein Minumumwert fehlt. Das einfachste ist, wenn
du einen "Dummysatz" mit IP=0 (sozusagen das Netzwerk :_) anlegst.
Dann gehts.



-- 
Gruß, Rob


php::bar PHP Wiki   -   Listenarchive