php - 将一个 MySQL 表中的条目复制到另一个表(如果不存在)

标签 php mysql

如果条目不存在,我正在尝试将条目从一个表复制到另一个表。下面的代码不做任何条目。我似乎无法确定它。我在这里缺少什么?

<?php

$conn = mysqli_connect("localhost", "user", "Pass123", "DB");
$copy="SELECT * FROM TIME";
$doit=$conn->query($copy);
while($row = $doit->fetch_assoc()){
  $check=mysqli_query($conn, "SELECT * FROM TIME2 WHERE O_LOG='{$row['LOG']}'");
  if(!$check){
    $sql = mysqli_query($conn, "INSERT INTO TIME2 (O_LOG, T_IN, T_OUT, EMP, ITEM, NOTE) VALUES ('".$row['LOG']."', '".$row['T_IN']."', '".$row['T_OUT']."', '".$row['EMP']."', '".$row['ITEM']."', '".$row['NOTE']."')");
  }
}
?>

最佳答案

if (!$check)

应该是

if ($check->num_rows == 0)

您只是测试查询是否有错误,而不是测试它是否没有返回任何行。

但是,您可以通过一个查询完成这一切:

INSERT IGNORE INTO TIME2 (O_LOG, T_IN, T_OUT, EMP, ITEM, NOTE)
SELECT LOG, T_IN, T_OUT, EMP, ITEM, NOTE
FROM TIME

IGNORE 修饰符告诉它默默地跳过任何会导致重复键错误的插入(我假设 LOG 是一个唯一的键)。

如果 LOG 不是唯一键,您仍然可以通过一个查询来完成:

INSERT INTO TIME2 (O_LOG, T_IN, T_OUT, EMP, ITEM, NOTE)
SELECT t.LOG, t.T_IN, t.T_OUT, t.EMP, t.ITEM, t.NOTE
FROM TIME AS t
LEFT JOIN TIME2 AS t2 ON t.LOG = t2.O_LOG
WHERE t2.O_LOG IS NULL

关于php - 将一个 MySQL 表中的条目复制到另一个表(如果不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465520/

相关文章:

php - PHP-fpm+nginx 没有可用的环境变量

php - 使用 mysql 和 mysqli

MySQL:如何选择具有相同 id 的最新行

php - 从 mysql 中检索数据并从 php 中输出 json

javascript - 将 mysql 查询的 json 结果作为参数传递给 Node/express 中的 ejs

php - 单个 IP 地址的连接被拒绝 - CentOS 7/Apache/Laravel

php - 将 json 导出为字符串(不是数组)

php - 动态限制用户可以选中的复选框数量

php - 独特值的 SQL 查询(条目)

具有连接和计数的 mysql 查询