Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL或PHP:链接两个字段,然后与另一时间填充的字段进行比较_Php_Mysql - Fatal编程技术网

MySQL或PHP:链接两个字段,然后与另一时间填充的字段进行比较

MySQL或PHP:链接两个字段,然后与另一时间填充的字段进行比较,php,mysql,Php,Mysql,我对MySQL和PHP非常陌生。通常我需要一点语言方面的帮助,然后我就可以开始了。因此,我非常感谢您对我的第一个“复杂”问题的帮助。我有下面的数据库,它保存着关于网络的数据,每五分钟填充一次。MAC地址是唯一真正的静态值,因为它连接到硬件(make),所以可以用作密钥。其他一切都可能发生变化。这是我数据库的一个截断示例。有时,每次会有更多或更少的行 我一直在开发一个PHP前端来显示数据,我想添加的一个功能是比较列出的IP以及MAC-IP对,从最近一次到上一次。如果IP在当前时间与前一时间相比存在

我对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');

作为一个例子来阐明我正在尝试做什么。我总是希望我的HTML/PHP前端显示最新日期和时间的行。如果我们使用上面的示例,我希望我的用户在浏览网页时看到00:05的所有行。这很容易。现在让我们假设在00:00,我有MAC 00:00:00:00:00配对到192.168.30.1。但在00:05,MAC 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 |空|空|超微型计算机|空|空|空|空|空|
|2012-08-22 | 00:05:00 | 192.168.30.2 | 00:50:56:A4:52:5E | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
|2012-08-22 | 00:05:00 | 192.168.30.3 | 00:0A:9C:52:88:8C | NULL | NULL | NULL |服务器技术| NULL | NULL | NULL | NULL | NULL |
|2012-08-22 | 00:05:00 | 192.168.30.10 | BB:BB:BB:BB:BB | NULL | NULL |通用服务器| NULL | NULL | NULL | NULL | NULL|

当涉及到确定哪些行发生了更改时,我不知道是最好使用MySQL,还是只获取最近两次更新的行,然后使用PHP找出哪些行发生了更改?请记住,我的实际数据库每次将有100多个条目


从逻辑上讲,这里有一些关于我正在尝试做什么的更多细节。基本上,使用上面的示例,我想创建两个数组进行比较。我已经知道了如何将这两个领域进行比较,但我真的不知道从那里去,虽然我仍在研究。这让我非常沮丧,因为我可以通过shell脚本轻松地获得这些结果,并将它们直接输入数据库。我正在尽可能多地使用PHP和MySQL,但是让我的shell脚本解决这个问题的想法变得越来越诱人。但基本上这就是我试图对上表所做的,但我甚至不知道使用MySQL还是PHP进行操作是最好的 使用单独的
日期
时间
字段对您没有多大帮助。如果有任何问题,您应该有一个
datetime
,除非您需要按天进行报告,在这种情况下
date
将与创建适当的索引相关。请注意,尽量避免以内部SQL类型命名列<代码>日期可以是日期上的
时间
可以是时间
上的
以消除混淆。另外,在查询中使用时,不必转义它们

使用一个名为
created_At
的索引
datetime
字段,您可以
ORDER BY created_At DESC
,这可能是您在这里试图确定是否发生了更改时想要的

您还可以使用
BETWEEN
操作符选择日期时间值的范围,以便检查特定时间间隔内的更改


不完全清楚您的要求是什么,因此您可能需要更加具体,或者尝试重新构造,以便查询变得更加明显。

如果您是MySQL和PHP新手,那么您不应该使用
MySQL\u query
。这仅适用于遗留应用程序。新的应用程序应该使用
mysqli
或PDO来避免像本例中那样的极端严重问题。谢谢,我知道mysqli是一种新的更安全的方法,但我开始从一本过时的O'Reilly书中学习查询。我将开始使用mysqli。这些书来自一个更简单、更空闲的时代。一个没有工具的好地方。谢谢。这给了我更多的思考。我用底部的一个例子更新了我的原始问题,并缩小了我的示例表,以使我试图完成的内容更加清晰。
+------------+----------+----------------------+-------------------+------+------+----------------------+-------+------+--------+-------+------+
| 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 |
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