当数据使用 PHP 相交时,将数据从一个 MySQL table 复制到另一个
Copy data from one MySQL table to another when data intersect using PHP
我是编程新手,非常感谢您的帮助。 :) 所以,我有一个 USER
table 和一个 SALES
table。在 SALES
table 我只有用户的名字和姓氏。在 USER
table 上,我有 name
、last name
、USER_ID
、email
等...
当 NAME
和 [=27= 时,我需要将 USER_ID
从 USER
table 复制到 SALES
table ] 匹配。
结构如下:
USER_TABLE_A
USER_ID_A
NAME_LASTNAME_A
SALES_TABLE_B
ROW_ID_B
NAME_B
LASTNAME_B
USER_ID_B (empty)
到目前为止,我让两个 table 都可以在它们相交时显示数据,但不知道从这里到哪里去。有人可以帮忙吗?
$sql1 = mysql_query("SELECT name_B, lastname_B, user_id_B, row_id_B FROM sales_table_B WHERE name_B IS NOT NULL AND lastname_B IS NOT NULL", $db);
$sql2 = mysql_query("SELECT name_lastname_A, user_id_A FROM user_table_A WHERE name_lastname_A IS NOT NULL", $db);
$a1 = array();
while ($row = mysql_fetch_array($sql1)) {
$id = $row['row_id_B'];
$name1.$id = $row['name_B']." ".$row['lastname_B'];
array_push($a1, $name1.$id);
}
$a2 = array();
while ($row2 = mysql_fetch_array($sql2)) {
$id2 = $row2['user_id_A'];
$name2.$id2 = $row2['name_lastname_A'];
array_push($a2, $name2.$id2);
}
$result = array_intersect($a1,$a2);
print_r($result);
提前致谢!
假设 USER_TABLE_A
中的 NAME_LASTNAME_A
列是 SALES_TABLE_B
的 NAME_B
和 LASTNAME_B
列的串联,在 UPDATE
之后查询应更新 ID:
update sales_table_b
set b.user_id_b = (
select user_id_a from user_table_a
where name_lastname_a = concat(b.name_b, ' ' , b.lastname_b)
limit 1
where exists(
select user_id_a from user_table_a
where name_lastname_a = concat(b.name_b, ' ' , b.lastname_b)
)
)
请注意,如果多个用户的名字和姓氏相同,将考虑第一个匹配用户的 ID。
非常感谢达山!!您的答案在限制 1 之后缺少 a),但经过调整后效果很好!这是有效的代码:
UPDATE sales_table_b
SET user_id_b = (SELECT user_table_a.user_id_a
FROM user_table_a
WHERE user_table_a.name_lastname_a = CONCAT(sales_table_b.name_b, ' ' , sales_table_b.lastname_b) LIMIT 1)
WHERE EXISTS (SELECT *
FROM user_table_a
WHERE user_table_a.name_lastname_a = CONCAT(sales_table_b.name_b, ' ' , sales_table_b.lastname_b))
我是编程新手,非常感谢您的帮助。 :) 所以,我有一个 USER
table 和一个 SALES
table。在 SALES
table 我只有用户的名字和姓氏。在 USER
table 上,我有 name
、last name
、USER_ID
、email
等...
当 NAME
和 [=27= 时,我需要将 USER_ID
从 USER
table 复制到 SALES
table ] 匹配。
结构如下:
USER_TABLE_A
USER_ID_A
NAME_LASTNAME_A
SALES_TABLE_B
ROW_ID_B
NAME_B
LASTNAME_B
USER_ID_B (empty)
到目前为止,我让两个 table 都可以在它们相交时显示数据,但不知道从这里到哪里去。有人可以帮忙吗?
$sql1 = mysql_query("SELECT name_B, lastname_B, user_id_B, row_id_B FROM sales_table_B WHERE name_B IS NOT NULL AND lastname_B IS NOT NULL", $db);
$sql2 = mysql_query("SELECT name_lastname_A, user_id_A FROM user_table_A WHERE name_lastname_A IS NOT NULL", $db);
$a1 = array();
while ($row = mysql_fetch_array($sql1)) {
$id = $row['row_id_B'];
$name1.$id = $row['name_B']." ".$row['lastname_B'];
array_push($a1, $name1.$id);
}
$a2 = array();
while ($row2 = mysql_fetch_array($sql2)) {
$id2 = $row2['user_id_A'];
$name2.$id2 = $row2['name_lastname_A'];
array_push($a2, $name2.$id2);
}
$result = array_intersect($a1,$a2);
print_r($result);
提前致谢!
假设 USER_TABLE_A
中的 NAME_LASTNAME_A
列是 SALES_TABLE_B
的 NAME_B
和 LASTNAME_B
列的串联,在 UPDATE
之后查询应更新 ID:
update sales_table_b
set b.user_id_b = (
select user_id_a from user_table_a
where name_lastname_a = concat(b.name_b, ' ' , b.lastname_b)
limit 1
where exists(
select user_id_a from user_table_a
where name_lastname_a = concat(b.name_b, ' ' , b.lastname_b)
)
)
请注意,如果多个用户的名字和姓氏相同,将考虑第一个匹配用户的 ID。
非常感谢达山!!您的答案在限制 1 之后缺少 a),但经过调整后效果很好!这是有效的代码:
UPDATE sales_table_b
SET user_id_b = (SELECT user_table_a.user_id_a
FROM user_table_a
WHERE user_table_a.name_lastname_a = CONCAT(sales_table_b.name_b, ' ' , sales_table_b.lastname_b) LIMIT 1)
WHERE EXISTS (SELECT *
FROM user_table_a
WHERE user_table_a.name_lastname_a = CONCAT(sales_table_b.name_b, ' ' , sales_table_b.lastname_b))