Mailinglisten-Archive |
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