Можно ли использовать более 1 запроса в mysql? - PullRequest
1 голос
/ 24 апреля 2020

Привет, ребята, у меня есть сомнения здесь, у меня есть мой веб-сайт, и я пытаюсь вывести в php из моей базы данных максимальную температуру, минимальную температуру, самую последнюю температуру, которая вошла в БД, и я посмотрел вокруг, и кажется, что мне нужно использовать 2 запроса, используя UNION от Mysql, и я использовал его, но теперь он показывает только максимальную температуру в БД за текущий день, вот мой код:

$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 голосов
/ 24 апреля 2020

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
...