我试图弄清楚如何将数据从第一个表插入到第二个表中,但我不想插入第二个表已经从之前的注入中获得的现有数据。在插入数据之前还有检查吗?
以下是我目前的情况:
//Get Connection
require_once('connect.php');
//Copy data to another table
$query = mysqli_query($con, "INSERT INTO content2 (d1, d2, d3) SELECT d1, d2, d3 FROM content");
mysqli_close($con);
我试图把#34; LIMIT 1"进入查询,但它没有工作。我不确定我是否把它放在正确的地方......
答案 0 :(得分:2)
您可以让数据库验证数据是否唯一。例如,如果d1, d2, d3
的三元组应该是唯一的,那么在这些列上创建一个唯一的索引/约束:
create unique index idx_content2_d1_d2_d3 on content2(d1, d2, d3);
然后,如果您尝试插入一行,您将收到错误。您可以使用on duplicate key update
:
INSERT INTO content2(d1, d2, d3)
SELECT d1, d2, d3
FROM content
ON DUPLICATE KEY UPDATE d1 = values(d1);
更新实际上并未更改任何值。它只是防止发生错误。
答案 1 :(得分:1)
INSERT INTO content2 (d1,d2,d3)
SELECT c1.d1,c1.d2,c1.d3 from content c1
Where not exists (
select *
from content2 as c2
where c1.d1 = c2.d1 and c1.d2 = c2.d2 and c1.d3 = c2.d3
)
希望这会有所帮助
Fiddle for selecting the row from c1 which not exist in c2
在插入之前,你要检查整行是否包含为什么条件是针对d1,d2,d3。如果只需要检查任何列,你可以避免其他人
答案 2 :(得分:1)
作为Gordon Linoff回答的补充,还可以使用INSERT IGNORE
生成错误消息,从而实现此结果。
您的查询将如下所示:
$query = mysqli_query($con, "INSERT IGNORE INTO content2 (d1, d2, d3) SELECT d1, d2, d3 FROM content");
如果您尝试插入content2
的数据包含表中已存在的主键,则会跳过该数据。这将生成警告,而不是生成错误消息。如果记录中尚不存在该记录,则将创建该记录。