You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP脚本开发求助:检测MySQL最后10行Temperature列值是否一致并触发邮件通知

解决MySQL最后10行Temperature值一致性检测问题

首先,你的第二个SQL语句逻辑有误,导致无法得到预期结果。让我先解释问题出在哪,再给你两种可行的解决办法:

问题分析

你写的第二个查询:

SELECT Temperature, COUNT(*) as duplicates FROM AllinOne GROUP BY Temperature ORDER BY ID DESC LIMIT 10

这个语句的问题在于:

  • GROUP BY Temperature是对整个表中所有相同温度的行进行分组统计,而不是只针对最后10行数据
  • ORDER BY ID DESC在分组后没有意义,因为分组后的结果集里没有单个行的ID字段,数据库无法按这个字段排序
  • 最终返回的是整个表中出现次数最多的前10种温度的统计数,完全不符合你“检测最后10行温度是否一致”的需求

解决方案1:用SQL直接统计(推荐)

我们可以先通过子查询获取最后10行的Temperature数据,再统计其中不同值的数量。如果不同值的数量为1,就说明所有值一致:

SELECT COUNT(DISTINCT Temperature) AS unique_temp_count
FROM (
    -- 先获取最后10行的Temperature
    SELECT Temperature 
    FROM AllinOne 
    ORDER BY ID DESC 
    LIMIT 10
) AS last_10_rows;

在PHP中处理这个结果:

$sql_check = "SELECT COUNT(DISTINCT Temperature) AS unique_temp_count FROM (SELECT Temperature FROM AllinOne ORDER BY ID DESC LIMIT 10) AS last_10_rows";
$result_check = mysqli_query($conn, $sql_check);
$row_check = mysqli_fetch_assoc($result_check);

if ($row_check['unique_temp_count'] === 1) {
    // 所有温度值一致,触发邮件发送
    echo "最后10行温度全部相同,准备发送邮件!";
    // 这里添加你的邮件发送代码,比如 mail(...)
} else {
    echo "最后10行温度存在不同值,不触发邮件。";
}

解决方案2:在PHP中处理已获取的10行数据

既然你已经能成功获取最后10行数据,也可以直接在PHP代码中判断这些值是否全部相同,不用再额外查询数据库:

$sql = "SELECT ID, DayTime, Temperature FROM AllinOne ORDER BY ID DESC LIMIT 10";
$result = mysqli_query($conn, $sql);

$temperatures = [];
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $temperatures[] = $row["Temperature"];
        echo "id: " . $row["ID"]. " - DayTime: " . $row["DayTime"]. " - Temperature " . $row["Temperature"]. "<br>";
    }
} else {
    echo "0 results";
}

// 判断所有温度是否相同
$all_temperatures_same = false;
if (!empty($temperatures)) {
    // 利用array_unique去重后,若长度为1则说明全部相同
    $all_temperatures_same = count(array_unique($temperatures)) === 1;
}

if ($all_temperatures_same) {
    // 触发邮件发送功能
    echo "所有温度值一致,执行邮件发送操作!";
    // 你的邮件代码写在这里
} else {
    echo "存在不同的温度值,不执行邮件发送。";
}

两种方法都能解决你的问题,你可以根据自己的需求选择:如果想减少PHP的代码量,用SQL统计的方法更高效;如果需要保留获取到的10行数据做其他处理,第二种方法更灵活。

内容的提问来源于stack exchange,提问作者ThP...

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:53:11