2014-09-28 62 views
1

我有一个以下脚本。它一直在工作。昨天它开始回应0结果。我找到了原因。该脚本不选择最高端口,并且在不存在空闲端口之间时加1。如何添加异常或修复它,如果它已经存在。MySQL添加异常存在查询,选择最大值+ 1

应该先免费服务器端口(从删除服务器)选择或者如果不存在,那么最新的一个+ 1

它是如何工作的:MySQL first free number between exists values

SELECT data.sPort 
    FROM 
     ((SELECT (s.server_port + 1) sPort 
     FROM servers s 
     LEFT JOIN servers sp1 ON sp1.server_port = s.server_port + 1 
     WHERE (sp1.server_port IS NULL) AND sp1.server_port<>0 AND sp1.server_type='" . $server['server_type'] . "' AND sp1.server_port<>9987 
     ORDER BY sPort) 

     UNION ALL 

     (SELECT s.server_port sPost 
     FROM servers s 
    WHERE s.server_port<>0 AND s.server_port<>9987 AND s.server_type='" . $server['server_type'] . "' 
     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 
+1

'WHERE(sp1.server_port IS NULL)AND sp1.server_port <> 0 AND sp1.server_type ='” ...'不计算...提示:“左加入” – wildplasser 2014-09-28 21:16:18

回答

0

在你的第一个派生表它似乎你想为特定的服务器类型选择下一个端口。如果是这样,尝试改变这个

LEFT JOIN servers sp1 ON sp1.server_port = s.server_port + 1 
WHERE (sp1.server_port IS NULL) AND sp1.server_port<>0 AND sp1.server_type='" . $server['server_type'] . "' AND sp1.server_port<>9987 

LEFT JOIN servers sp1 ON sp1.server_port = s.server_port + 1 
    AND s.server_type = sp1.server_type 
WHERE sp1.server_port IS NULL 
    AND s.server_port<>0 
    AND s.server_type='" . $server['server_type'] . "' 
    AND s.server_port<>9987