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

PHP中SQL查询整合:自动获取onrow编号执行明日未完成产品查询

解决方案:合并两个SQL查询获取目标产品列表

嘿,这个需求其实很常见,我们可以通过SQL的关联查询或者子查询来把两个逻辑合并起来,不用再手动输入onrow编号啦。我给你几种可行的方案,你可以根据自己的表结构和数据量选最合适的:

方法一:使用子查询作为筛选条件

假设你的第一个查询是获取未完成产品(比如status = '未完成'),第二个查询是获取明天交货的产品onrow列表。我们可以把第二个查询作为子查询,放到第一个查询的WHERE条件里,直接筛选出同时满足两个条件的产品:

SELECT * 
FROM products 
-- 子查询获取明天交货的所有onrow编号
WHERE onrow IN (
    SELECT onrow 
    FROM products 
    -- 这里用CURDATE() + INTERVAL 1 DAY获取明天的日期,适配MySQL
    WHERE delivery_date = CURDATE() + INTERVAL 1 DAY
) 
-- 加上未完成的条件
AND status = '未完成';

小提示:

如果你的delivery_date是datetime类型(包含时分秒),记得用DATE(delivery_date)来提取日期部分,避免时间干扰:

WHERE DATE(delivery_date) = CURDATE() + INTERVAL 1 DAY

方法二:使用JOIN关联查询

如果你的数据量比较大,或者更习惯用JOIN的写法,可以用内连接把同一张表(或关联表)的两个筛选逻辑结合起来:

SELECT p1.* 
FROM products p1
-- 关联明天交货的产品记录
JOIN products p2 ON p1.onrow = p2.onrow
WHERE p2.delivery_date = CURDATE() + INTERVAL 1 DAY
AND p1.status = '未完成';

这种写法和子查询逻辑等价,在某些场景下数据库的查询优化器会给出更优的执行计划。

结合PHP执行并输出表格

接下来把合并后的查询放到PHP里执行,同时输出成表格(这里用PDO示例,避免SQL注入风险):

<?php
// 假设你已经通过PDO建立了数据库连接,$pdo是连接实例
$dbQuery = "
    SELECT * 
    FROM products 
    WHERE onrow IN (
        SELECT onrow 
        FROM products 
        WHERE DATE(delivery_date) = CURDATE() + INTERVAL 1 DAY
    ) 
    AND status = '未完成';
";

// 准备并执行查询
$stmt = $pdo->prepare($dbQuery);
$stmt->execute();

// 获取所有结果
$targetProducts = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 输出HTML表格
if (!empty($targetProducts)) {
    echo "<table style='border-collapse: collapse; width: 100%;'>";
    // 输出表头
    echo "<tr>";
    foreach (array_keys($targetProducts[0]) as $columnName) {
        echo "<th style='border: 1px solid #ddd; padding: 8px; text-align: left;'>" . htmlspecialchars($columnName) . "</th>";
    }
    echo "</tr>";
    // 输出每行数据
    foreach ($targetProducts as $product) {
        echo "<tr>";
        foreach ($product as $value) {
            echo "<td style='border: 1px solid #ddd; padding: 8px;'>" . htmlspecialchars($value) . "</td>";
        }
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "<p>没有找到交货日期为明天且未完成的产品</p>";
}
?>

额外说明:

  • 如果你的两个查询来自不同的表(比如第二个查询从delivery_schedule表获取onrow),只需要调整子查询或JOIN中的表名和关联条件即可。
  • 记得根据你实际的字段名(比如status的取值、delivery_date的字段名)修改代码中的对应部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:53:04