php - 从 mysql 表中获取多行并使用 PHP 描述时间范围

标签 php mysql

我有一个如下所示的mysql表

ip_add                      mac                     time
10.0.0.97                00 14 2A 2F 72 FE         2013-09-18 16:35:47
10.0.0.97                00 14 2A 2F 72 FE         2013-09-19 08:48:02
10.0.0.98                08 CC 68 71 A1 C0         2013-09-18 16:35:47
10.0.0.98                08 CC 68 71 A1 C0         2013-09-19 08:48:02

我有一个 php 脚本,我想打印以下行

The ip address 10.0.0.97 was used by MAC 00 14 2A 2F 72 FE from 2013-09-18 16:35:47 to 2013-09-19 08:48:02
The ip address 10.0.0.97 was used by MAC 00 14 2A 2F 72 FE from  2013-09-19 08:48:02 to present(i.e there has not been a further entry of that ip )
The ip address 10.0.0.98 was used by MAC 00 14 2A 2F 72 FE from 2013-09-18 16:35:47 to 2013-09-19 08:48:02
The ip address 10.0.0.97 was used by MAC 00 14 2A 2F 72 FE from  2013-09-19 08:48:02 to present

我写的脚本如下

$var = $_POST['IP'](ip which will be obtained from form);
mysql_connect('localhost','root','mysql');
mysql_select_db('logs');
$result=mysql_query("select ip_add,mac from arp_table where ip_add='$var'");
$row=mysql_fetch_row($result);
$count=mysql_query("select COUNT (*)  from arp_table where ip_add='$var'");
$row2 =mysql_fetch_row($count);

echo "The number of instances this ip address was used is {$row2[0]}<br/>"

if($row2==1){
$time=mysql_query("select ip_add, time from arp_table where ip_add='$var'")
$time2=mysql_fetch_row($time);
echo "It was used from {$time2[1]} and it is still in use<br/>";}
else
{$time3=mysql_query("select ip_add,time from arp_table where ip_add='$var'");
while($row3=mysql_fetch_assoc($time3)){
echo "This ip was used by MAC {$row[1]} from (*I`M STUCK HERE*) to (*I`M STUCK HERE*)"}
}

如何获取同一ip注册的上一个时间并将其关联到下一个在线时间

最佳答案

试试这个:

SELECT
    ip_add,
    mac,
    MIN(time) as from_time,
    MAX(time) as to_time
FROM 
    my_table
GROUP BY
    ip_add,
    mac

或者如果你想要每一行:

SELECT
    a.ip_add,
    a.mac,
    a.time as from_time,
    (
        SELECT 
            time 
        FROM 
            my_table b 
        WHERE 
            b.ip_add = a.ip_add 
            AND a.time < b.time 
        ORDER BY 
            b.time 
        LIMIT 1
    ) as to_time
FROM 
    my_table a

关于php - 从 mysql 表中获取多行并使用 PHP 描述时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889405/

相关文章:

php - 一种在 php 中将值连接到字符串的简单方法

php - 如何在codeigniter中将http重定向到https

php - 将 SQL 查询转换为 codeigniter 事件记录

php - 如何在doctrine2实体中禁用字符串最大长度的隐式字符串修剪?

mysql - 如何在 MySQL 中列出给定表的所有索引列

mysql - 获取每个用户最后三个条目的平均值

php - 为ajax调用填充mysql查询的日期间隙

php - 调用未定义的函数 Intervention\\Image\\Gd\\imagecreatefromjpeg() - laravel

mysql 查询不工作

php - Laravel 5.2 模型用户->发票->发票详细信息