【问题标题】:Multiple MYSQL Queries against one PHP variable针对一个 PHP 变量的多个 MYSQL 查询
【发布时间】:2015-11-01 16:17:00
【问题描述】:

我已经分解了单个 SQL 查询,以从我的 SQL 表中获取我想要的信息,但我对如何将所有语句组合到一个变量中感到困惑。这个变量在 PHP 中用于显示我的数据。

这是我要运行的 SQL 查询。

SELECT * FROM weather ORDER BY stamp DESC LIMIT 1 

SELECT SUM(rainfall) FROM weather WHERE stamp >= CURDATE()) AS total_rainfall

SELECT MAX(maxwind) FROM weather WHERE stamp >= CURDATE()) AS max_windspeed

SELECT MAX(temperature) FROM weather WHERE stamp >= CURDATE()) AS max_temperature

SELECT MIN(temperature) FROM weather WHERE stamp >= CURDATE()) AS min_temperature

这是我当前的查询,除了过去 24 小时的最大风速、最高温度和最低温度之外,它提供了我想要的一切。

 SELECT *, (SELECT SUM(rainfall) FROM weather WHERE stamp >= CURDATE()) AS total_rainfall FROM weather ORDER BY stamp DESC LIMIT 1

基本上,我只是想添加当前日期内发生的最高温度、最低温度和最大风速。

MySQL data table example

这是我尝试使用 PHP 显示数据的方式。

<?php

$url1=$_SERVER['REQUEST_URI'];

header("Refresh: 60; URL=$url1");

$connectinfo = mysql_connect("***", "***", "***")
or die(mysql_error());

mysql_select_db("raspberrydb001", $connectinfo);

$sql = "SELECT *, (SELECT SUM(rainfall) FROM weatherdata WHERE stamp >= CURDATE()) AS total_rainfall FROM weatherdata ORDER BY stamp DESC LIMIT 1; ";


$result = mysql_query($sql, $connectinfo);

while($row = mysql_fetch_array($result)) {

$windspeed = $row['windspeed'];
$maxwind = $row['maxwind'];
$temperature = $row['temperature'];
$humidity = $row['humidity'];
$rainfall = $row['rainfall'];
$stamp = $row['stamp'];
$d=mktime();
$total_rainfall = $row['total_rainfall'];

echo "<div style='text-align:center'><h5>Temperature:  " . $temperature . "(F)" . "<br>" . "Rainfall: " . $total_rainfall . "(in)" . "<br>" . "Wind: " . $windspeed . "(MPH)" . "<br>" .  "Humidity: " . $humidity . "(%)" . "<br>" .  "</h5></div>";
echo "<div style='text-align:right'><h6>Updated at: " . $stamp . "</h6></div>";
echo "<br>";

}

?>

谢谢

【问题讨论】:

  • 你为什么不像为 total_rainfall 添加其他查询?

标签: mysql


【解决方案1】:

我建议将其拆分为两个查询。

首先,收集您的所有数据:

SELECT * FROM weather ORDER BY stamp DESC LIMIT 1 

其次,收集最小/最大数据:

SELECT
    SUM(rainfall) AS total_rainfall, 
    MAX(maxwind) AS max_windspeed, 
    MAX(temperature) AS max_temperature, 
    MIN(temperature)  AS min_temperature 
FROM 
    weather
WHERE stamp >= CURDATE())
LIMIT 1

【讨论】:

  • 如果聚合函数上没有 group by 总是会返回一行,所以 limit 1 不需要,通常限制没有 order by 是没有意义的,因为 sql 数据是无序的。
  • 我添加了我的 PHP 块来显示我是如何尝试显示数据的。这让我感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2013-04-28
  • 2021-09-02
  • 2015-08-17
相关资源
最近更新 更多