我有两个 SQL 表,一个包含“手动插入数据”,另一个包含脚本“自动插入数据”。

为了测试脚本是否正常,手动表和自动表是一样的。

因此,我想“比较”两个数据库,然后在另一个脚本中突出显示差异。

// $currentdate_today_midnight is a timestamp

$sql_getLive = "SELECT * FROM worksheets WHERE entry_date > $currentdate_today_midnight";
$req_getLive = $cnx->query($sql_getLive);
$req_getLive->setFetchMode(PDO::FETCH_OBJ);

// countAll counts all rows for a table and a condition
$countLive = countAll("worksheets", "entry_date > $currentdate_today_midnight");

$sql_getCriter = "SELECT * FROM criter_live WHERE entry_date > $currentdate_today_midnight";
$req_getCriter = $cnx->query($sql_getCriter);
$req_getCriter->setFetchMode(PDO::FETCH_OBJ);

$countCriter = countAll("criter_live", "entry_date > $currentdate_today_midnight");

if($countLive == 0){
    /* If there is no live (manual datas) inserted */
    echo "EMPTY";
    die();
}

while ($check_criter = $req_getCriter->fetch()) {

    while ($check_live = $req_getLive->fetch()) {

        if ($check_live->train_id == $check_criter->train_id) {

            /* check_live = worksheets */
            /* check_criter = criter_live */

            echo $check_live->train_id . "|" . $check_criter->entry_date . "|" . $check_live->entry_date . "|". $check_criter->left_date . "|". $check_live->entry_date . "|". $check_criter->train_type . "|". $check_live->train_type . "|". $check_criter->entry_number . "|". $check_live->entry_number . "|". $check_criter->left_number . "|". $check_live->left_number. "#";

        }
    }
}

所以,我试图制作“一会儿”但它不起作用,我只得到一个“echo ”......而不是 17 个(由于 countAll 函数返回)。

我做错了吗?或者还有其他解决方案吗?

谢谢!

最佳答案

编辑: 我假设您在两个表中都有相同的数据。

删除第二个 while 循环:

while ($check_criter = $req_getCriter->fetch()) {

    $check_live = $req_getLive->fetch();

    if ($check_live->train_id == $check_criter->train_id) {

        echo $check_live->train_id . "|" . $check_criter->entry_date . "|" . $check_live->entry_date . "|". $check_criter->left_date . "|". $check_live->entry_date . "|". $check_criter->train_type . "|". $check_live->train_type . "|". $check_criter->entry_number . "|". $check_live->entry_number . "|". $check_criter->left_number . "|". $check_live->left_number. "#";

    }
}

基本上,在外循环的第一次迭代中,您一直从 $req_getCriter 获取 1 行并将其与来自 $req_getLive 的所有其他行进行比较。第二次迭代不起作用,因为从 $req_getLive 中提取了所有行。

关于php - 一会儿只显示一行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35172312/

10-12 04:59