gpt4 book ai didi

php - INSERT where 不存在于 php 脚本中,比较 2 个表

转载 作者:行者123 更新时间:2023-11-28 23:07:18 25 4
gpt4 key购买 nike

我目前有一个每 5 分钟运行一次的脚本,它从服务器 1 上的表和服务器 2 上的相同表中选择数据。从本质上讲,这是复制的一种解决方法,因为我们目前没有该选项。

脚本是成功的,但我意识到它有时会丢失记录,无论出于何种原因。当前脚本从目标表中选择所有记录,存储最大主键,从源表中选择所有数据,然后将具有更大主键的任何内容插入到目标中。表。

我想稍微修改一下脚本,而不是使用最大 ID,只是说“如果某行的主键不存在于目标表中,则将该行插入到那里。”

同样,这些是克隆表,因此结构相同,并且它们都使用 AI 主键。

这是当前的工作脚本:

$latest_result = $conn2->query("SELECT MAX(`SESSIONID`) FROM 
`ambition`.`session`");
$latest_row = $latest_result->fetch_row();
$latest_session_id = $latest_row[0];

//Select All rows from the source phone database
$source_data = mysqli_query($conn, "SELECT * FROM
`cdrdb`.`session` WHERE `SESSIONID` > $latest_session_id");

// Loop on the results
while($source = $source_data->fetch_assoc()) {

// Check if row exists in destination phone database
$row_exists = $conn2->query("SELECT SESSIONID FROM
ambition.session WHERE SESSIONID = '".$source['SESSIONID']."' ") or
die(mysqli_error($conn2));

//if query returns false, rows don't exist with that new ID.
if ($row_exists->num_rows == 0){

//Insert new rows into ambition.session
$stmt = $conn2->prepare("INSERT INTO ambition.session (SESSIONID,
SESSIONTYPE,CALLINGPARTYNO,FINALLYCALLEDPARTYNO,
DIALPLANNAME,TERMINATIONREASONCODE //etc. There are a lot of columns so I
ommitted the others

有没有一种方法可以稍微修改它以仅插入不存在的内容而不是依赖 MAX ID?

或者这里有什么东西是导致它丢失记录的罪魁祸首吗?

最佳答案

您可以使用 INSERT INTO SELECT 并检查值是否已在目标中:

INSERT INTO trg_table (cols)
SELECT cols
FROM src_table s
WHERE NOT EXISTS (SELECT 1 FROM trg_table t WHERE t.id = s.id);

关于php - INSERT where 不存在于 php 脚本中,比较 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com