【问题标题】:Php self table join on timestampphp self table join on timestamp
【发布时间】:2017-05-01 13:59:53
【问题描述】:

我有一个 SQL 表在我的数据库中运行,我的所有设备也在现场报告。

其中写入的一些事件是时基,其他是异步的,这就是为什么某些条目具有相同的时间戳 (ts)

这是表(名称为:数据)

id     node_id  type    origin  value   ts  
54475   11      COV     P1      2969    2017-04-30  21:54:59    
54476   11      COV     P1      2967    2017-04-30  21:56:16    
54477   11      INT     P1      2967    2017-04-30  22:00:00    
54478   11      INT     P4      2297    2017-04-30  22:00:00    
54479   11      COV     P1      2965    2017-04-30  22:08:00    
54480   11      INT     P1      2966    2017-04-30  22:15:01    
54481   11      INT     P4      2301    2017-04-30  22:15:01    
54482   11      INT     P1      2963    2017-04-30  22:30:03    
54483   11      INT     P4      2299    2017-04-30  22:30:03    
54484   11      COV     P1      2961    2017-04-30  22:35:00    
54485   11      COV     P1      2963    2017-04-30  22:43:40    

我想让我的 sql 请求给我这样的输出

type    P1     P2     P3    P4    device_ts
COV    2969                       2017-04-30  21:54:59
COV    2967                       2017-04-30  21:56:16
INT    2967                 2297  2017-04-30  22:00:00
COV    2965                       2017-04-30  22:08:00
INT    2966                 2301  2017-04-30  22:15:01
INT    2963                 2299  2017-04-30  22:30:03
COV    2961                       2017-04-30  22:35:00
COV    2963                       2017-04-30  22:43:40

所以我可以在我的 html 代码中做这样的事情

while($data = $P1->fetch(PDO::FETCH_ASSOC))
{
    if($data['type']=="INT")
    {
      echo "<tr>";
      echo "<td>P1 value is : ".$data['P1']."</td>";
      echo "<td>P2 value is : ".$data['P2']."</td>";
      echo "<td>P3 value is : ".$data['P3']."</td>";
      echo "<td>P4 value is : ".$data['P4']."</td>";
      echo "<td>Time stamp. : ".$data['device_ts']."</td>";
      echo "</tr>";
    }
}

这可能吗? sql请求格式是什么?

【问题讨论】:

    标签: php html mysql join


    【解决方案1】:

    您可以使用以下数据透视查询直接在 MySQL 中处理此查询的繁重工作:

    SELECT
        type,
        MAX(CASE WHEN origin = 'P1' THEN value END) AS P1,
        MAX(CASE WHEN origin = 'P2' THEN value END) AS P2,
        MAX(CASE WHEN origin = 'P3' THEN value END) AS P3,
        MAX(CASE WHEN origin = 'P4' THEN value END) AS P4,
        device_ts
    FROM data
    GROUP BY type, device_ts
    ORDER BY device_ts, type
    

    输出:

    演示在这里:

    Rextester

    【讨论】:

    • 你是说这是对我的数据库的复杂请求,当我的表中有 2500 万个条目时会不会有问题?
    • @Jean-GabrielMaurice 我会更担心有大量未知数量的列要旋转。如果你真的只有四个P 值,那么我宁愿在数据库中处理这个问题。
    • 它不起作用,我没有得到该请求的任何价值
    • @Jean-GabrielMaurice 重新加载页面,我有一个错字,这就是我设置演示的原因。
    • "连接失败:SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列'ts'"
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2018-05-13
    相关资源
    最近更新 更多