可以在mysql中使用多个查询吗?

时间:2020-04-23 22:23:09

标签: php mysql database date group-by

嗨,我在这里有一个疑问,我有我的网站,我试图从数据库中回显php中的最高温度,最低温度,进入数据库的最新温度,我环顾四周,看来我需要使用来自MySQL的UNION来使用2个查询,我使用了它,但现在它仅显示了当天的DB最高温度 这是我的代码:

$connect = mysqli_connect(".....", ".....", "....", ".....");
$sql ="SELECT MAX(temperature) as max_temperature , MIN(temperature) as min_temperature 
        FROM sensor 
        WHERE DATE(data) = CURDATE() 
        UNION 
        SELECT temperature, data 
        FROM sensor 
        ORDER BY data DESC 
        LIMIT 1";

$result = mysqli_query($connect, $sql);

while($row = mysqli_fetch_array($result)) {
    $max_temperature = number_format($row['max_temperature'], 1, '.', ',');/*armazena dados vindo da B.D  */
    $temperature = number_format($row['temperature'], 1, '.', ',');
    $min_temperature = number_format($row['min_temperature'], 1, '.', ',');
}

echo "<h4>".$max_temperature."</h4>";
echo "<h3>".$temperature."</h3>";
echo "<h4>".$min_temperature."</h4>"; 

非常感谢所有帮助人员!

1 个答案:

答案 0 :(得分:0)

UNION在这里似乎不是必需的,并增加了客户端的复杂性。您可以使用以下查询在一行上获得所需的三个信息(因此,无需UNION

SELECT 
    MAX(temperature) max_temperature, 
    MIN(temperature) min_temperature,
    (SELECT temperature FROM sensor ORDER BY data DESC LIMIT 1) current_temperature
FROM sensor
WHERE data >= current_date AND data < current_date + 1 day

我不确定窗口功能是否会更好(尽管这需要MySQL 8.0):

SELECT DISTINCT
    MAX(temperature) OVER() max_temperature, 
    MIN(temperature) OVER() min_temperature,
    FIRST_VALUE(temperature) OVER(ORDER BY date DESC) current_temperature
FROM sensor
WHERE data >= current_date AND data < current_date + interval 1 day
相关问题