SELECT data.sPort
FROM
((SELECT (s.server_port + 1) sPort
FROM pro_servers s
LEFT JOIN pro_servers sp1 ON sp1.server_port = s.server_port + 1
WHERE (sp1.server_port IS NULL)
ORDER BY sPort)
UNION ALL
(SELECT s.server_port sPost
FROM pro_servers s
GROUP BY s.server_port
HAVING COUNT(s.server_port) = SUM(s.server_deleted)
ORDER BY sPort)) AS data
ORDER BY data.sPort
LIMIT 1
SqlFiddle:http://sqlfiddle.com/#!2/12ab1/2
Wie es funktioniert
-
pro_servers
beitreten mitpro_servers
mitserver_port = server_port + 1
Join-Bedingung und Take-Zeilen, wonull
ist im nächsten Hafen. Diese Zeilen zeigen die ersten Ports von jeder Lücke. Die Port-ID kann alsserver_port + 1
angenommen werden . -
Alle gelöschten Ports übernehmen.
-
Union 1. und 2., sortiert nach
server_port
und nimm den ersten.
Es gibt eine Annahme für eine Antwort - Port mit der niedrigsten Nummer wird immer genommen. Wenn dies nicht der Fall ist, überprüfen Sie diesen Port separat (oder fügen Sie einen weiteren UNION ALL
hinzu zur Abfrage).