繁体   English   中英

PHP在一个带有日期时间戳的请求中加入多行

[英]Php join multiple row in one request with date time stamp

我不是mysql专家,所以请问我问题的简单性。 我有一张像这样的桌子:

ID - NODE - ORIGIN - VALUE - DATETIME

1 - 11 -  P1 - 2031 - 2017-01-01 20:15:17

2 - 11 -  P2 - 2531 - 2017-01-01 20:15:17

3 - 11 -  P3 - 2731 - 2017-01-01 20:15:17

4 - 11 -  P4 - 2031 - 2017-01-01 20:15:17

5 - 11 -  P1 - 2831 - 2017-01-01 20:30:17

6 - 11 -  P2 - 2917 - 2017-01-01 20:30:17

7 - 11 -  P3 - 2631 - 2017-01-01 20:30:17

8 - 11 -  P4 - 2031 - 2017-01-01 20:30:17

我要求看起来像这样:

SELECT * 
FROM data 
WHERE NODE = '$nodeid'
AND ORIGIN = 'P1'
AND DATETIME BETWEEN '$start' and '$end'
ORDER BY DATETIME
LIMIT 1000

而且我收到一张表,该表的所有结果在$start$end ,其起点为P1

问题是我正在尝试绘制一个看起来像这样的HTML表

Date /time  - P1 - P2 - P3 - P4

2017-01-01 20:15:17 - 2031 - 2531 - 2731 2031
2017-01-01 20:30:17 - 2831 - 2917 - 2631 2031

我不知道我是否足够清楚,但是我什至不知道我想要什么。 任何帮助将不胜感激

您已经在问题中提到了代码字JOIN 掌握了以下内容后,下面的查询就不会很难编写。

对于您的情况,您想将表连接到自身。 这称为自我联接,但与其他联接没有什么不同。 您只需要确保表具有不同的别名即可:

SELECT d1.`DATETIME`, d1.value P1, d2.value P2, d3.value P3, d4.value P4
FROM data d1
LEFT JOIN data d2 ON d2.`DATETIME` = d1.`DATETIME` AND d2.ORIGIN = 'P2'
LEFT JOIN data d3 ON d3.`DATETIME` = d1.`DATETIME` AND d3.ORIGIN = 'P3'
LEFT JOIN data d4 ON d4.`DATETIME` = d1.`DATETIME` AND d4.ORIGIN = 'P4'
WHERE 
    d1.ORIGIN = 'P1' AND
    NODE = '$nodeid' AND
    DATETIME BETWEEN '$start' and '$end'
ORDER BY DATETIME
LIMIT 1000

我对字段名称DATETIME进行了转义以确保其有效,因为它既是函数又是数据类型的名称。 它不是关键字,所以它可能工作得很好(我还没有测试过),但是只要打勾,就可以确定它是否有效。
最好不要在架构中使用SQL特定的词,这样就不必担心类似的事情。

最后一点:我希望您至少在创建该查询之前先对变量进行转义。
如果不是这样,您的代码很容易受到SQL注入的攻击。
阅读此答案以了解如何将值从PHP传递到SQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM