【问题标题】:Issue with JOIN in PHP MySQLPHP MySQL 中的 JOIN 问题
【发布时间】:2016-01-29 18:22:30
【问题描述】:

在向查询中添加 JOIN 时遇到了一些困难。我正在连接到两个单独的数据库(在同一台服务器上)。出于这个原因,我正在简单地编写这个 mysqli,一旦它工作,它将转换为准备好的语句。

// REMOVED: DB VARIABLES

$conn = new mysqli($servername, $username, $password, $db_connective_data);
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
$conn2 = new mysqli($servername, $username, $password, $db_resources);
if ($conn2->connect_error) { die("Connection failed: " . $conn2->connect_error); }

$sql = "SELECT * FROM downloads LEFT JOIN resource_data ON downloads.resource_id_REF=resource_data.resource_id WHERE downloads.user_basics_id_REF='$user_id'";
$result = $conn->query($sql);

$number_of_download_rows_returned = mysqli_num_rows($result) -1;

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $resource_id_REF[] = $row['resource_id_REF'];
        $download_date[] = date('Y-m-d', strtotime($row['download_date']));
        $resource_title[] = $row['resource_title'];
        $resource_title_link[] = str_replace(" ", "-", $row['resource_title']);
    }
}

$conn->close();

没有 JOIN 的查询可以正常工作(尽管没有返回 resource_title):

$sql = "SELECT * FROM downloads WHERE downloads.user_basics_id_REF='$user_id' ORDER BY downloads.download_date DESC";

我在这里缺少什么?第一个代码示例将不返回任何结果。第二个将返回三个。

非常感谢任何帮助。

这是我引用的不同数据库名称的列表。正如我所说,一些数据在“connective_data”数据库中,一些在“资源”数据库中。

$db_connective_data = "connective_data";
$db_lists = "lists";
$db_messaging = "messaging";
$db_resources = "resources";
$db_users = "users";

我似乎无法将其中两个连接起来。我在这里遗漏了一些非常明显的东西吗?

【问题讨论】:

  • 你为什么不使用$conn2
  • 我也想知道同样的事情。有没有办法使用它? (我想我需要连接到两个数据库,不是吗?)大声笑
  • 不知道需要用吗?
  • 在执行查询后输入:if(!$result){ echo $conn->error;} 看看他的问题是什么。错误处理总是很重要的!
  • 我的意思是,使用 phpmyadmin(或类似的东西)。这将消除 php 和连接问题,并允许您测试查询本身。

标签: php mysql mysqli error-handling


【解决方案1】:
  1. 如果数据库位于同一个 mysql 服务器上,则无需创建 2 个连接。您可以简单地将另一个数据库中的表作为 databasename.tablename 引用。

  2. 因此,您可以将来自 2 个不同数据库的 2 个表连接为:

    $sql = "SELECT * FROM yourdatabase1.downloads LEFT JOIN yourdatabase2.resource_data ON yourdatabase1.downloads.resource_id_REF=yourdatabase2.resource_data.resource_id WHERE yourdatabase1.downloads.user_basics_id_REF='$user_id'";

显然,您需要在上述查询中将您的真实数据库名称替换为 yourdatabase1 和 yourdatabase2。

更新:您确定需要这么多数据库吗?这些对我来说似乎是表,而不是数据库。

【讨论】:

  • 这更像是我自己的大脑的视觉/逻辑分离。在每个数据库中,我都有大约 20 个表(当然,取决于数据库)。我可以把所有的桌子都放在一个大数据库里,但这会炸掉我已经很脆的大脑!大声笑感谢您的回答。我会尝试并回复你。
  • 这正是我所需要的。我没有放 db_name.table_name 而是错误地放了 table_name.row_name 。感谢您的帮助,@Shadow!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2018-12-12
  • 2014-01-15
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多