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

PHP中将查询语句转换为if语句:处理两条现有SELECT查询

嘿,我来帮你把这两个SQL查询转换成PHP里的条件判断逻辑。首先得明确,我们需要先执行这两个查询拿到结果,再用if语句根据结果做对应的业务处理。先帮你补全未写完的$validCheck(假设它是判断有效期在指定日期7天之后的有效记录),再给出完整的PHP实现:

将SQL查询转换为PHP条件判断逻辑

第一步:补全完整的SQL查询语句

$expiredCheck = " SELECT sku_id, dealer_id, expire_date FROM dealerplacetest p INNER JOIN skus s ON p.sku_id = s.id WHERE p.dealer_id = :DEALER AND s.build = :build AND s.cov = :cov AND s.col = :col AND p.expire_date <= date_add(convert(:ship,date), interval 7 day) ";
$validCheck = " SELECT sku_id, dealer_id, expire_date FROM dealerplacetest p INNER JOIN skus s ON p.sku_id = s.id WHERE p.dealer_id = :DEALER AND s.build = :build AND s.cov = :cov AND s.col = :col AND p.expire_date > date_add(convert(:ship,date), interval 7 day) ";

第二步:结合PHP PDO执行查询并添加if判断逻辑

这里用PDO来执行带命名参数的查询,是最适配你现有SQL写法的方案:

// 假设你已经初始化好PDO连接实例$pdo
$dealerId = "目标经销商ID";
$buildVal = "对应build参数值";
$covVal = "对应cov参数值";
$colVal = "对应col参数值";
$shipDate = "目标发货日期";

// 执行过期记录查询
$expiredStmt = $pdo->prepare($expiredCheck);
$expiredStmt->bindParam(':DEALER', $dealerId);
$expiredStmt->bindParam(':build', $buildVal);
$expiredStmt->bindParam(':cov', $covVal);
$expiredStmt->bindParam(':col', $colVal);
$expiredStmt->bindParam(':ship', $shipDate);
$expiredStmt->execute();
$expiredRecords = $expiredStmt->fetchAll(PDO::FETCH_ASSOC);

// 执行有效记录查询
$validStmt = $pdo->prepare($validCheck);
$validStmt->bindParam(':DEALER', $dealerId);
$validStmt->bindParam(':build', $buildVal);
$validStmt->bindParam(':cov', $covVal);
$validStmt->bindParam(':col', $colVal);
$validStmt->bindParam(':ship', $shipDate);
$validStmt->execute();
$validRecords = $validStmt->fetchAll(PDO::FETCH_ASSOC);

// 用if语句处理不同场景
if (!empty($expiredRecords)) {
    // 存在过期记录的业务逻辑
    echo "发现 " . count($expiredRecords) . " 条即将过期的库存记录:";
    foreach ($expiredRecords as $record) {
        echo "<br>SKU ID: {$record['sku_id']} | 过期日期: {$record['expire_date']}";
    }
} elseif (!empty($validRecords)) {
    // 只有有效记录的业务逻辑
    echo "所有匹配的库存记录均有效,共 " . count($validRecords) . " 条";
} else {
    // 无匹配记录的业务逻辑
    echo "未找到符合条件的库存记录";
}

优化小技巧

如果不需要获取完整的记录数据,只是判断是否存在过期/有效记录,可以把SQL改成统计数量的形式,性能会更好:

// 修改后的过期查询语句
$expiredCheck = " SELECT COUNT(*) AS record_count FROM dealerplacetest p INNER JOIN skus s ON p.sku_id = s.id WHERE p.dealer_id = :DEALER AND s.build = :build AND s.cov = :cov AND s.col = :col AND p.expire_date <= date_add(convert(:ship,date), interval 7 day) ";

// 执行后直接获取数量
$expiredStmt->execute();
$expiredCount = $expiredStmt->fetchColumn();

if ($expiredCount > 0) {
    // 存在过期记录的逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:26:08