2014-01-28 30 views
0

我有逻辑工作(直接在phpmyadmin中输入时),但不知道如何将其转换为php。我将非常感谢这个翻译到php语句的帮助。PHP,MySQL和两个数据库 - 从第一个数据库中的第二个数据库表中更新某些行的不同模式

工作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); 
?> 
+0

'mysql_ *'已被弃用,并且已经有一段时间了。看看mysqli或PDO。 – cHao

+0

除此之外,你可能会有一段时间试图获得两个不同的连接来配合一个查询。您最好使用一个或另一个连接,并确保连接的用户可以访问其他数据库。 – cHao

+0

我已经收集到了,但是我正在使用的脚本是基于折旧的PHP版本加上我不确定它是否真的影响了我的问题的核心方面(即如何在php中的标记之间表示mysql逻辑)。我认为打开第一个数据库的连接并将结果存储在数组中 - 然后访问第二个数据库/更新它可能是要走的路,但我不清楚如何在php中执行此操作。 – zww

回答

0

让我尝试了这一点,任何错误很抱歉,因为我在我的手机

$q = mysql_query("select * from db1.gfields", $conn2); 

while ($r = mysql_fetch_array($q)) 
    $u = mysql_query("update averages set average = " . $r["ratingavg"] . " where id = " . $r["id"], $conn2); 

mysql_close($conn2); 

也mysql_ *在某个时间点上非常过时,所以也许考虑的mysqli或可能PDO

已更新。这假设你的用户有足够的权限。

+0

只用一个连接做 – Sachin9

+0

更新后。我把它换成了一个连接,使用连接到目标db – KyleMassacre

+0

去凯尔!作品一种享受。必须稍微更新一些字段,按照我在原始问题中所做的修改。两个连接都可以正常工作。再次,非常感谢! – zww

2

你应该做一个连接与访问这两个数据库的帐户服务器,然后使用您已有的查询:

update 
    database1.table as t1, 
    database2.othertable as t2 
set 
    t1.name = t2.name 
where 
    t1.id = t2.id 

如果执行查询这种方式,只会更新ID匹配的记录,它将跳过所有其他记录。无法使用两个单独的数据库连接并以这种方式同步数据。

相关问题