4

我有 2 个不同的数据库(我可以访问两者),并且它们有一个具有相同结构的表。这是一张名为events. 我想连接到两个数据库并从中获取结果,events这样我就可以显示日期是否大于或等于今天。

$db1 = new PDO('mysql:host='.$db_host1.';dbname='.$db_name1,$db_username1,$db_pass1);
$db2 = new PDO('mysql:host='.$db_host2.';dbname='.$db_name2,$db_username2,$db_pass2);

$db1->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$db2->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

$today = date("Y-m-d");
$stmt1 = $db1->query("SELECT * FROM events WHERE event_start >= $today ORDER BY event_start ASC");
$stmt2 = $db2->query("SELECT * FROM events WHERE event_start >= $today ORDER BY event_start ASC");

//this works for only one of the database. in this case $stmt1 which connects to db1
while($row = $stmt1->fetch()) { 
//echo'd data will go here  
}
4

2 回答 2

6

做你在这里尝试的最好方法是创建第三个数组来合并结果,然后使用它。像这样:

$db1 = new PDO('mysql:host='.$db_host1.';dbname='.$db_name1,$db_username1,$db_pass1);
$db2 = new PDO('mysql:host='.$db_host2.';dbname='.$db_name2,$db_username2,$db_pass2);

$db1->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$db2->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

$today = date("Y-m-d");
$query = "SELECT * FROM events WHERE event_start >= $today ORDER BY events ASC";
$stmt1 = $db1->query($query);
$stmt2 = $db2->query($query);

$results = array_merge($stmt1->fetchAll(PDO::FETCH_ASSOC), $stmt2->fetchAll(PDO::FETCH_ASSOC));

// Then sort the new array, perhaps something like this
$events = array();
foreach ($results as $key => $row){
    $events[$key] = $row['events'];
}

array_multisort($key, SORT_ASC, $results);

print_r($results);

我不确定您在活动字段中订购的是什么;但是,按照相同的标准对新的 $results 数组进行排序应该相对容易。查看PHP Array Sorting以获得适当的排序算法。

于 2013-07-02T20:12:10.783 回答
-1

你可能想要做准备好的陈述。但是,您可以在查询后根据需要组合结果。下面的示例(未经测试):

$stmt1 = $db1->query("SELECT * FROM events WHERE event_start >= :today ORDER BY events ASC");
$stmt2 = $db2->query("SELECT * FROM events WHERE event_start >= $today ORDER BY events ASC");
$combined = array_merge($stmt1->fetchAll(PDO::FETCH_ASSOC), $stmt2->fetchAll(PDO::FETCH_ASSOC));

ksort($combined); // or some other ordering, maybe on date key?

foreach($combined as $record) {
  // use $record['column'] access
}
于 2013-07-02T20:14:56.233 回答