我已经有了逻辑工作(当直接在 phpmyadmin 中输入时),但不确定如何将其转换为 php。我将非常感谢您对 php 语句翻译的帮助。
工作的 mysql 逻辑列在哈希符号之间(因为我一直在计算所需的其他 php 语句)。为了澄清逻辑/过程,我在 db2 中有一个表,其中保存了某些 id 的一组“平均值”。我想将这些平均值移至 db1 表中的等效“平均”字段。匹配必须通过两个表共有的 id 字段来完成,尽管 db2 并没有 db1 中列出的每个 id 的条目。
<?php
$dbhost = 'localhost';
$dbuser1 = 'dbuser1';
$dbpass1 = 'dbpass1';
$dbuser2 = 'dbuser2';
$dbpass2 = 'dbpass2';
$conn1 = mysql_connect($dbhost, $dbuser1, $dbpass1);
$conn2 = mysql_connect($dbhost, $dbuser2, $dbpass2, true);
if(! $conn1 || ! $conn2 )
{
die('Could not connect to db1 or db2: ' . mysql_error());
}
mysql_select_db('db1', $conn1 );
mysql_select_db('db2', $conn2);
#####
update db1.gfields, db2.averages
set db1.gfields.ratingavg = db2.averages.average
where db1.gfields.id = db2.averages.id;
this is an after-fix edit to show the code that solved the issue (initially provided below by KyleMassacre & updated slightly. Works with two connections, didn't try with one.)
$q = mysql_query("select * from averages", $conn2);
while ($r = mysql_fetch_array($q)) {
$u = mysql_query("update gfields set ratingavg = " . $r["average"] . " where id = " . $r["id"], $conn1);
#####
mysql_close($conn1);
mysql_close($conn2);
?>
最佳答案
您应该使用有权访问这两个数据库的帐户与服务器建立一次连接,然后使用您已有的查询:
update
database1.table as t1,
database2.othertable as t2
set
t1.name = t2.name
where
t1.id = t2.id
如果以这种方式执行查询,它只会更新 ID 匹配的记录,而会跳过所有其他记录。不可能使用两个单独的数据库连接并以这种方式同步数据。
关于PHP、mysql 和两个数据库 - 使用不同的架构从第一个数据库中的表更新第二个数据库表中的某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21397056/