三维数组和发送项目的电子邮件一次

时间:2011-10-18 00:54:45

标签: php mysql

我有一个检查脚本,它检查服务器/交换机/路由器是否还活着。

记录全部存储在一个db

CREATE TABLE IF NOT EXISTS `mod_monitoring` (
  `id` int(11) NOT NULL,
  `parentid` int(11) NOT NULL,
...
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

所以一个路由器可以在它下面有一个交换机(通过父ID连接),并且可以在它下面有一个服务器,现在如果服务器出现故障,它很好,因为没有任何东西可以在它下面,并且不会发送双重电子邮件但是,让我们说一个路由器出来,它下面有一个路由器和一些服务器。

因为我们检查了所有内容,我们会向管理员发送每个项目的电子邮件,告诉他们每个人都已经死了,但我只需发送一封关于路由器关闭的电子邮件。希望这是有道理的,我需要以某种方式只制作一个没有孩子的ID数组..

我可以创建一个已关闭的所有节点的数组,但是如何检查它是否是树中的第一个?并删除其下的所有内容

有人可以帮忙吗?多年来一直在考虑这个问题!

2 个答案:

答案 0 :(得分:0)

如果我理解了你想要的东西,那就是从父级到父级的迭代(需要一个未指定数量的JOIN),你需要使用Stored Procedure。事实上,要实现这一目标,您需要在SQL查询中无法实现的Kleene closure

答案 1 :(得分:0)

最后,我最终制作了所有死亡ID的数组$ key => $ ID

然后使用以下

if(is_array($dead)) {
        foreach($dead as $key => $id) {
            $conn = $db->query("SELECT * FROM mod_monitoring WHERE id = {$id}");
            $data = $db->fetch_array($conn);
            if($data['parentid'] == 0) {
                $final[] = $id;
                unset($dead[$key]);
            }
        }
    }
    if(is_array($dead)) {
        foreach($dead as $key => $id) {
            $conn = $db->query("SELECT * FROM mod_monitoring WHERE id = {$id}");
            $data = $db->fetch_array($conn);
            if(in_array($data['parentid'], $final)) {
                unset($dead[$key]);
            } 
            if(in_array($id, $dead)) {
                unset($dead[$key]);
            }
        }
    }