我正在尝试创建一个从不同数据库显示数据的网站。 我制作了3个简单的数据库(Application(app_id,app_name),Manager(manager_id,manager_name),Website(website_id,website_name))
以下是我用来连接数据库的代码:
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("Application", $con);
$result1 = mysql_query("SELECT a.app_id, a.app_name FROM Application a");
//connection with other db
$con2 = mysql_connect("localhost","root","");
if (!$con2)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("Manager", $con2);
$result2 = mysql_query("SELECT b.manager_id, b.manager_name FROM Manager b");
//connection with other db
$con3 = mysql_connect("localhost","root","");
if (!$con3)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("Website", $con3);
$result3 = mysql_query("SELECT c.website_id, c.website_name FROM Website c");
然后我在表格中回应:
echo "<table border='1'>
<tr>
<th>ID</th>
<th>Application</th>
<th>Manager</th>
<th>Website</th>
</tr>";
while(($row = mysql_fetch_array($result1)) && ($row2 = mysql_fetch_array($result2)) && ($row3 = mysql_fetch_array($result3)))
{
echo "<tr>";
echo "<td>" . $row['app_id'] . "</td>";
echo "<td>" . $row['app_name'] . "</td>";
echo "<td>" . $row['manager_name'] . "</td>";
echo "<td>" . $row2['website_name'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
mysql_close($con2);
这是在表格中显示数据,但没有关系,所以我创建了这个:
$resultcombo = mysql_query("SELECT a.app_id, a.app_name, b.manager_name, c.website_name FROM Application.Application a JOIN Manager.Manager b on a.app_id = b.manager_id JOIN Website.Website c ON a.app_id = c.website_id ");
以上查询在phpmyadmin中工作,它显示彼此链接的正确信息(ID 1 =应用程序x,管理器x,网站x)
但是如何连接3个不同的数据库(将来可能更多)以填充表格,并使用链接到管理员和网站的正确应用程序?
我感觉我所做的3个连接都没用,因为表格填写不正确。也许我必须将1个mysql_connect连接到3个不同的数据库。
请注意:我使用3x localhost进行测试,但将来我想使用不同网址的数据库!
答案 0 :(得分:3)
尊敬的是,您对数据库和表之间的区别感到困惑。您说这个查询有效。
SELECT a.app_id, a.app_name,
b.manager_name, c.website_name
FROM Application a
JOIN Manager b on a.app_id = b.manager_id
JOIN Website c ON a.app_id = c.website_id
这清楚地表明您只有一个数据库,其中包含三个表。表格为Application
,Manager
和Website
。
编辑。
这里有两种可能的情况。
在第一种情况下,您的问题似乎可能只有一个用户名/密码组合可以访问所有三个数据库。所以,只需使用一个连接,并使用这样的查询。
SELECT a.app_id, a.app_name,
b.manager_name, c.website_name
FROM Application.Application a
JOIN Manager.Manager b on a.app_id = b.manager_id
JOIN Manager.Website c ON a.app_id = c.website_id
您已经知道,如果表名在查询中,如果它们位于同一服务器上并且您的连接用户名可以访问所有,则可以使用数据库名称限定表名。所以,编程好像你的表位于同一地点。
如果您的数据库可能位于不同的MySQL服务器上,那么您自己就会购买一个巨型毛球。 (这是一个技术术语。)你可以......
但是你应该避免以这种方式设计你的系统,除非你绝对必须这样做。
为什么你必须这样做?
如果您使用多服务器设计进行关键任务生产工作,那么您将在系统的整个生产生命周期中承受巨大的麻烦。您可能希望聘请数据库管理员来处理其中一些令人头疼的问题。认真。避免这种情况。