ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
315
315
EMPFEHLEN
-
Hallo,
ich hab ein Problem mit einer MySQL-Abfrage..
Also ich habe eine Tabelle mit folgendem Aufbau:
Code :1 2 3 4
ID | Servername | Port 1 | Testserver | 62718 3 | Demoserver | 17283 4 | MeinServer | 22738
Ich will jetzt gerne den nächsten freien Port ermitteln, jedoch immer 2 höher.
In diesem Beispiel wäre der nächste freie Port 17283, bzw. plus 2 also 17285.
Wie kann ich diesen nächsten freien Port ermitteln?
Mein Ansatz war
Als Ergebnis bekomme ich damit (in meiner DB) Port 30009, dieser ist jedoch in der Datenbank vorhanden, funktioniert also so nicht...Code :1
SELECT MIN(port) AS FreePort FROM server WHERE NOT EXISTS (SELECT port FROM server WHERE port = port+1) AND NOT EXISTS (SELECT port FROM server WHERE port = port-1) AND port > 30000 AND port < 65535 LIMIT 1
Ich hoffe mir kann jemand helfen, danke schonmal
-
http://wiki.yaslaw.info/wikka/MySQLFirstNotUsedId
Und das ganez angepasst für den 2er Schritt
Die Anpassungen für den 2er Schritt sind das +2 im ersten Subselect und das +1 im 2ten SubselectCode sql:1 2 3 4 5 6 7 8 9 10
SELECT MIN(newIds.newId) AS firstNotUsedId FROM -- jeweils die nächst höhere ID ermitteln (SELECT id + 2 AS newId FROM test) AS newIds -- und mit der Tabelle zurückverknüpfen LEFT JOIN (SELECT id+1 AS id FROM test ) AS ids ON newIds.newId = ids.id WHERE ids.id IS NULL;
Nachtrag: Ist nicht durchgetestet.....
Nachtrag 2:
Habs gestestet. Muss noch etwas angepasst werden. Mit einem UNION erweitern um den neuen Port gegen [alle Bestehnde] und [alle Bestehende+1] zu testen
Testdaten:Code sql:1 2 3 4 5 6 7 8 9 10
SELECT MIN(newPorts.port) AS firstNotUsedPort FROM # jeweils die nächst höhere ID ermitteln (SELECT port + 2 AS port FROM ports) AS newPorts # und mit der Tabelle zurückverknüpfen LEFT JOIN (SELECT port+1 AS port FROM ports UNION SELECT port FROM ports) AS ports ON newPorts.port = ports.port WHERE ports.port IS NULL;
Code :1 2 3 4 5 6
"port" "17564" "17565" "17566" "17568" "17900"
firstNotUsedPort: 17570---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
mhm.. das funktioniert aber scheinbar nicht mit einer einzigen Tabelle?
-
öh doch. In meinem Beispiel heisst die Tabelle `ports` und ist nur eine einzige Tabelle.
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Okay, manchmal ist man bisschen blind

Funktioniert alles, danke dir!
Ähnliche Themen
-
[PHP][MYSQL] Checken ob Wert in Datenbank
Von ggf_razor im Forum PHPAntworten: 8Letzter Beitrag: 15.03.10, 22:53 -
nächster Datensatz; mdb Datenbank
Von tobi726 im Forum Java GrundlagenAntworten: 2Letzter Beitrag: 15.12.08, 16:06 -
Nächster Wert aus MySQl lesen - auto increment
Von wal im Forum Relationale DatenbanksystemeAntworten: 7Letzter Beitrag: 04.12.08, 17:40 -
While -> Abruch und nächster Wert
Von PhoenixDH im Forum PHPAntworten: 2Letzter Beitrag: 29.07.05, 13:57 -
Nächster Wert eines Arrays
Von xNeOx im Forum PHPAntworten: 2Letzter Beitrag: 11.10.04, 10:03





Zitieren

Login





