mysql_*
新しいコードで関数を使用しないでください。それらはもはや保守されておらず、公式に非推奨です。赤いボックスがか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。
理論的には同じサーバー上の2 つの異なるデータベースのテーブルを結合することは可能ですが、2 つの異なるサーバーにアクセスしているように見えるため、実行しようとしていることが機能しない可能性があります。
必要な結果セットを取得するには、それらを手動で結合する必要があります。
例 (PDO を使用):
$dsn1 = "mysql:host=$host;dbname=$db_name";
$dsn2 = "mysql:host=$host2;dbname=$db_name2";
try {
// Create the connections
$db1 = new PDO($dsn1, $username, $password);
$db1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db1->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db1->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db2 = new PDO($dsn2, $username2, $password2);
$db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db2->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db2->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// Get the initial recordset
$sql1 = "
SELECT InterestedEntityId, Score
FROM `user_interests`
WHERE UserId = :userId
ORDER BY Score DESC
";
$stmt1 = $db1->prepare($sql1);
$stmt1->bindParam('userId', $userID, PDO::PARAM_INT);
$stmt1->execute();
// Prepare the statement for the second database
$sql2 = "
SELECT Name
FROM entities
WHERE Id = :entityId
";
$entityId = 0;
$stmt2 = $db2->prepare($sql2);
$stmt2->bindParam('id', $entityId, PDO::PARAM_INT);
// Loop the first result set
$result = array();
foreach ($stmt1 as $row1) {
// Fetch the related data from the second DB
$entityId = $row1['InterestedEntityId'];
$stmt2->execute();
$row2 = $stmt2->fetch();
// Construct the final result row and store it
$result[] = array(
'InterestedEntityId' => $row1['InterestedEntityId'],
'Score' => $row1['Score'],
'Name' => $row2['Name']
);
}
} catch(PDOException $e) {
die($e->getMessage());
}
// The result set you want should now be available
var_dump($result);