我对 MySQL 和 PHP 很陌生。通常我需要一些语言方面的帮助,然后我才能从那里开始。所以我真的很感谢我的第一个“复杂”问题的帮助。我有下面的数据库,其中包含有关网络的数据,并且每五分钟填充一次。MAC 地址是唯一真正静态的值,因为它附加到硬件(make),因此可以用作密钥。其他一切都可能发生变化。这是我的数据库的截断示例。有时每次有或多或少的行。
我一直在使用 PHP 前端来显示数据,我想添加的一个功能是比较列出的 IP,以及从最近一次到上次的 MAC-IP 对。如果与前一次相比,当前时间存在或不存在 IP,则获取这些行。此外,如果 MAC 切换到不同的 IP 或 IP 切换到不同的 MAC,也获取这些行。
基本上,这些是我用来获取数据以在 PHP 中显示的一些查询,但它们对于显示表中的内容非常基本。谢谢你,我很感激你的帮助。任何答案都会帮助我学到很多东西,在此之后我应该能够自己弄清楚更多。谢谢!
/* Get all results for Today's Date */
$result = mysql_query("SELECT * FROM hosts WHERE date = '$DateToday' ORDER BY date DESC,time DESC") or die('Error with mysql_query');
$CurrentLogTime = $row['time']; // Variable set to time field of first row.
/* Get all results for Today's Date and most recent log time. */
$result2 = mysql_query("SELECT * FROM hosts WHERE date = '$DateToday' and time = '$CurrentLogTime'") or die('Error with result2');
/* Get all results for Today's Date and previous log time. */
$result3 = mysql_query("SELECT * FROM hosts WHERE date = '$DateToday' and time = TIMEDIFF ('$CurrentLogTime', '00:05')") or die('Error with result3');
+------------+----------+----------------------+-------------------+------+------+----------------------+-------+------+--------+-------+------+
| date | time | ip | mac | name | dns | make | owner | note | status | specs | os |
+------------+----------+----------------------+-------------------+------+------+----------------------+-------+------+--------+------+-------+
| 2012-08-22 | 00:00:00 | 192.168.30.1 | 00:00:00:00:00:00 | NULL | NULL | Supermicro Computer | NULL | NULL | NULL | NULL | NULL |
| 2012-08-22 | 00:00:00 | 192.168.30.10 | BB:BB:BB:BB:BB:BB | NULL | NULL | Generic Server | NULL | NULL | NULL | NULL | NULL |
| 2012-08-22 | 00:05:00 | 192.168.30.1 | 11:11:11:11:11:11 | NULL | NULL | Supermicro Computer | NULL | NULL | NULL | NULL | NULL |
| 2012-08-22 | 00:05:00 | 192.168.30.2 | 00:50:56:A4:52:5E | NULL | NULL | VMware | NULL | NULL | NULL | NULL | NULL |
| 2012-08-22 | 00:05:00 | 192.168.30.3 | 00:0A:9C:52:88:8C | NULL | NULL | Server Technology | NULL | NULL | NULL | NULL | NULL |
| 2012-08-22 | 00:05:00 | 192.168.30.10 | BB:BB:BB:BB:BB:BB | NULL | NULL | Generic Server | NULL | NULL | NULL | NULL | NULL |
作为一个例子来澄清我想要做什么。我总是希望我的 HTML/PHP 前端显示最新日期和时间的行。如果我们使用上面的示例,我希望我的用户在浏览网页时看到 00:05 的所有行。这很容易。现在假设在 00:00,我将 MAC 00:00:00:00:00:00 与 192.168.30.1 配对。但是在 00:05,MAC 11:11:11:11:11:11 占用了 192.168.30.1。我想在我的 HTML 中突出显示该行。另外,假设在 00:00,当时唯一的 IP 是 192.168.30.1 和 192.168.30.10。但是在 00:05,不仅有 192.168.30.1 和 .10,而且还有 192.168.30.2 和 192.168.30.3。我想突出显示在 00:05 出现的新 IP 行。最后,我们看到 192.168.30.10 的 IP-MAC 对在两次之间是相同的。当我生成最终用户表时,我仍然想回应这一点,但我不想以任何方式突出显示它。所以最终的结果应该是一个类似这样的网页生成的网页,其中与上次不同的 IP-MAC 组合以粗体显示。
| 2012-08-22 | 00:05:00 | 192.168.30.1 | 11:11:11:11:11:11 | 空 | 空 | 超微电脑 | 空 | 空 | 空 | 空 | 空 |
| 2012-08-22 | 00:05:00 | 192.168.30.2 | 00:50:56:A4:52:5E | 空 | 空 | 虚拟机 | 空 | 空 | 空 | 空 | 空 |
| 2012-08-22 | 00:05:00 | 192.168.30.3 | 00:0A:9C:52:88:8C | 空 | 空 | 服务器技术 | 空 | 空 | 空 | 空 | 空 |
| 2012-08-22 | 00:05:00 | 192.168.30.10 | BB:BB:BB:BB:BB:BB | 空 | 空 | 通用服务器 | 空 | 空 | 空 | 空 | 空 |
而当谈到确定已更改的行时,我不知道是最好使用 MySQL 还是只获取最近两次更新的行并使用 PHP 来找出发生了什么变化?请记住,我的实际数据库每次将有超过 100 个条目。
从逻辑上讲,这里有一些关于我想要做的事情的更多细节。基本上,使用上面的示例,我想创建两个数组进行比较。我已经想出了如何将这两个字段连接起来进行比较,但是虽然我仍在研究,但我真的不知道从那里去哪里。这对我来说非常令人沮丧,因为我可以通过 shell 脚本轻松获得这些结果并将它们直接输入数据库。我试图在 PHP 和 MySQL 中做尽可能多的事情,但是让我的 shell 脚本解决这个问题的想法变得越来越有食欲。但基本上这就是我想要对上表做的事情,但我什至不知道最好使用 MySQL 还是 PHP 进行操作。>.<
Array1
mac | ip
00:00:00:00:00:00 | 192.168.30.1
BB:BB:BB:BB:BB:BB | 192.168.30.10
Array2
mac | ip
11:11:11:11:11:11 | 192.168.30.1
00:50:56:A4:52:5E | 192.168.30.2
00:0A:9C:52:88:8C | 192.168.30.3
BB:BB:BB:BB:BB:BB | 192.168.30.10
WHERE Array1.ip == Array2.ip 或 Array1.mac == Array2.mac
执行
CONCAT Array1.ip,Array1.mac = Compare1 和 CONCAT Array2.ip,Array2.mac = Compare2
if Compare1 != Compare2
然后
将该行回显为大胆的