根据第一个结果编写第二个查询 - 不工作

时间:2013-08-25 16:21:15

标签: php mysql

* MySQL将在稍后升级。

前言:作者可以用两种语言注册,并且出于各种其他原因,这意味着2个数据库。我们意识到设置在使用多个数据库时看起来很奇怪,但更多这个简短的解释使它看起来如此。所以请忽略那种古怪。

情况: 我的第一个查询生成了取消订阅的作者记录集。它在第一个数据库中找到它们。

require_once('ConnString/FirstAuth.php');

mysql_select_db($xxxxx, $xxxxxx);
$query_Recordset1 = "SELECT auth_email FROM Authors WHERE Cancel = 'Cancel'";
$Recordset1 = mysql_query($query_Recordset1, $xxxxxx) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

在列出它们的第二个数据库中,(表名和列名相同)我想更新它们,因为它们被取消了。要选择他们的记录进行更新,我想获取第一个记录集,将其放入数组,交换connStrings,然后使用该数组进行搜索。

这些也有效。

$results = array();
do {
results[] = $row_Recordset1;
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

print_r($results);

给了我一个数组。数组([0] =>数组([auth_email] => renault@autxxx.com)[1] =>数组([auth_email] => rinaldi@autxxx.com)[2] =>数组( [auth_email] => hemingway@autxxx.com))...所以我知道它正在寻找第一组数据。

问题在于:第二个数据库的查询通过auth_email查找作者,如果它是' IN' $ results数组,但它没有像我预期的那样在第二个数据库中找到作者。请注意不同的connString

require_once('ConnString/SecondAuth.php');

mysql_select_db($xxxxx, $xxxxxx);
$query_Recordset2 = "SELECT auth_email FROM Authors WHERE auth_email IN('$results')";
$Recordset2 = mysql_query($query_Recordset2, $xxxxxx) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);

var_dump为0,但我知道应该找到两条记录。 我已经尝试了各种IN组合,例如{$ results},但当我到达"' $ results'"时,是时候寻求帮助了。我已经检查了所有可用的帖子,但没有解决我的问题,虽然我现在更熟悉野鹅种群。

我认为,因为我换掉了连接字符串,可能$ result被设为null所以我将它重新设置为原始的connString并且它仍然没有在同一数据库中的$ results中找到auth_email应该做的。

此外,我之前已经将connStrings换成了积极的结果,所以......嗯......

我的目标是,在工作时,将Recordset2回显到一个带有do / while循环的表单,这将允许我在第二个数据库中更新他们的记录。由于var_dump为0,显然下面没有给出第二个表中的作者列表,其电子邮件地址出现在$ results数组中,但我将其作为我想用来启动表单的示例包含在内页面。

do { 
    $row_Recordset2['auth_email_addr '];
} while($row_Recordset2 = mysql_fetch_assoc($Recordset2));

与往常一样,您可以提供任何指针,并且接受正确的答案。

2 个答案:

答案 0 :(得分:1)

如果您有一个可以访问数据库和表的数据库用户,只需使用跨数据库查询来执行更新

UPDATE
  mydb.Authors,
  mydb2.Authors
SET
  mydb.Authors.somefield = 'somevalue'
WHERE
  mydb.Authors.auth_email = mydb2.Authors.auth_email AND
  mydb2.Authors.Cancel= 'Cancel'

答案 1 :(得分:0)

IN子句除了像IN(var1,var2,var3)这样形成的变量之外 您应该使用function来创建一个字符串,其中包含此数组中的变量。

//the simplest way to go
$string = '';

foreach($results as $r){
 foreach($r as  $r){
 $string .= $r.",";
 }
}

$string = substr($string,0,-1); //remove the ',' from the end of string

它没有经过测试,显然不是最好的方法,但为了向您展示您的问题以及如何处理它的问题,这段代码非常相关。

现在在查询中使用$string而不是$results