【问题标题】:How to display data from two different databases in MySQL w/php如何在 MySQL w/php 中显示来自两个不同数据库的数据
【发布时间】:2013-01-17 21:49:04
【问题描述】:

我有一个客户想要将我作为注册用户存储在内容管理软件的数据库表中的电子邮件添加到来自另一个数据库的 html 生成的表中,该数据库是我为存储每个商店的所有数据而创建的。一个注册用户可以拥有二十家商店。如何将该用户的电子邮件从 CMS 数据库连接到他们拥有的来自另一个数据库的已注册商店的 html 表输出。

下面的插图很有希望地解释了难以用语言解释的东西。对于他们拥有的每个商店,DB1 中的“用户”与 DB2 中的“id”相同 - 见下文:

USER DATABASE (DB1) =====================

USER   |  EMAIL   |  NAME   |  WEBSITE
-----------------------------------------
user1  |  email1  |  name1  |  website 1
user2  |  email2  |  name2  |  website 2
user3  |  email3  |  name3  |  website 3


STORE DATABASE (DB2) ====================

ID     |  STORE    |  CITY    |  STATE
-----------------------------------------
user1  |  store1a  |  city1a  |  state1a
user1  |  store1a  |  city1a  |  state1a
user2  |  store1b  |  city1b  |  state1b
user2  |  store1b  |  city1b  |  state1b
user2  |  store1b  |  city1b  |  state1b
user3  |  store1c  |  city1c  |  state1c
user3  |  store1c  |  city1c  |  state1c

现在我想生成这样的 html 表格结果:

ID     |  STORE    |  CITY    |  STATE    |  EMAIL
-------------------------------------------------------
user1  |  store1a  |  city1a  |  state1a  |  email1
user1  |  store1a  |  city1a  |  state1a  |  email1
user2  |  store1b  |  city1b  |  state1b  |  email2
user2  |  store1b  |  city1b  |  state1b  |  email2
user2  |  store1b  |  city1b  |  state1b  |  email2
user3  |  store1c  |  city1c  |  state1c  |  email3
user3  |  store1c  |  city1c  |  state1c  |  email3

如您所见,我查询 DB2,希望能显示来自 DB1 的同一用户的电子邮件以及该用户拥有的所有商店。

这是应客户的要求,以便他们可以使用此 html 表格联系他们的注册事宜。我以为我会把这个扔出去。客户只是询问是否可能,这是否会有所帮助。我只是觉得这听起来像是有人想解决的问题,我只是在尝试过内部联接或只是查询两个单独的数据库并尝试使用变量后很好奇......无济于事!

【问题讨论】:

  • 这两个数据库是在同一台机器上吗?
  • 我已经查询了两个数据库并且在“emailid[array]”中有第一个数据库。现在我想做以下事情......“我想从 tb1 回显‘电子邮件’到来自 tb2 的行结果的末尾,其中来自 tb1 的‘电子邮件’与来自 tb1 的 emailid[array] 中的‘用户名’是与我想显示为上表示例的 tb2 行结果中的 'Vendor_ID' 相同。”必须有一种方法可以将“用户名”与“供应商 ID”匹配,以便“电子邮件”在行尾与正确的供应商回显。

标签: php mysql database


【解决方案1】:

两个数据库是否在同一台服务器上?数据库的用户名和密码是否相同?

如果是这样,你应该能够做这样的事情

SELECT * from databasename2NAME.db2 as t1
LEFT JOIN  datebasename1NAME.db1 as t2
ON t1.id=t2.USER
WHERE STATMENT HERE

databasename2NAME 应替换为 db2 的数据库名称,.db2 应替换为该数据库中的表名

db1 也一样

【讨论】:

  • 它们在同一台服务器上,但密码和用户名不同。
【解决方案2】:

由于两个数据库的密码不同,我想您需要两个单独的查询。这就是我尝试做的方式。处理能力可能有点多。也许有人可以加快速度。

$link1 = mysqli_connect($hostname1, $username1, $password1, $database1);
$query1 = "SELECT user,email FROM db1";
if ( $result1 = mysqli_query($link1, $query1, MYSQLI_STORE_RESULT) )
{
    while ( $r1 = mysqli_fetch_array($result1, MYSQLI_ASSOC) )
    {
        $array[$r1['user']] = $r1['email'];
    }

    $link2 = mysqli_connect($hostname2, $username2, $password2, $database2);
    foreach ( $array as $u=>$e )
    {
        $query2 = "SELECT * FROM db2 WHERE id='{$u}'";
        if ( $result2 = mysqli_query($link2, $query2, MYSQLI_STORE_RESULT) )
        {
            echo "<table>";
            while ( $r2 = mysqli_fetch_array($result2, MYSQLI_ASSOC) )
            {
                echo "<tr>";
                echo "<td>{$u}</td>";
                echo "<td>{$r2['store']}</td>";
                echo "<td>{$r2['city']}</td>";
                echo "<td>{$r2['state']}</td>";
                echo "<td>{$e}</td>";
                echo "</tr>";
            }
            echo "</table>";
        }
    }
    mysqli_close($link2);
}
mysqli_close($link1);

【讨论】:

  • 我正在阅读您的回复并注意到您的电子邮件等于 id 但我需要 db1 中的 'id' 等于 'user' 以便我可以获取 'email' .. 对吗? db2 中没有“电子邮件”值。我错过了什么吗?
  • 哦。我完全看错了表格。修复了我的帖子。您可能还想保留该数组。我将该数组设为关联数组,以便您可以存储用户和电子邮件以与下一个数据库匹配。
猜你喜欢
  • 2014-10-15
  • 2019-10-26
  • 2013-02-15
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多