我有两个 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/