[英]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.