【问题标题】:MySql: How to read a table from one database while searching second database table per each row?MySql:如何在每行搜索第二个数据库表时从一个数据库中读取一个表?
【发布时间】:2011-11-02 04:02:41
【问题描述】:

我是 MySql/PHP 的新手。

必须读取和显示 Database1.table1 中的每一行。它包含一个包含搜索词的列,我需要将其传递给 Database2.table2 并处理每读取一行的返回值。目前,我正在为 db1.table1 中的每一行与 Database2.table2 建立新连接,这确实很慢且效率低下。我无法更改表结构。

谢谢!

表格

db1 表 1:

id_row    type        model        har               status    id         date         
1         ATX         Hybrion      88-85-5d-id-ss    y         aaa12345   2011/08/12
2         BTX         Savin        none              n         aaa12345   2010/04/05
3         Full        Hp           44-55-sd-qw-54    y         ashley a   2011/07/25
4         ATX         Delin        none              _         smith bon  2011/04/05

db2 表 2:

id_row    id          first_name   last_name    dept    telephone
1         aaa12345    joe          smith        ANS     800 555 5555
2         bbb67890    sarah        brown        ITL     800 848 8848

所以数据库 1 表 1 是被读取和显示的表,如果 ID 为正匹配,则读取 db2 table2 并显示信息。 ID 仅在 db2 table2 中是唯一的,db1 table1 具有多格式列,因此它可能是也可能不是 ID,并且这些行可能具有重复的 ID。希望这可以更好地理解我需要什么。再次感谢!

有人建议使用EXISTS,但鉴于这种情况,我不知道如何使用。

【问题讨论】:

  • 首先,建立与 DB2 的连接并保持打开状态。 其次,确保 DB2 中的 id编入索引,因为您正在以半随机顺序访问它。
  • 我的第一反应是“不要关闭它”。你没有告诉我们你的环境——操作系统、语言、正在使用的数据库库、数据库在什么服务器上——所以我不知道如何开始回答这个问题。
  • @peter:服务器版本:5.0.26,使用php连接到mysql_connect($db_host, $db_user, $db_password) or die("Could not connect to the MySQL Server. Error: ". mysql_error());等服务器,然后连接到mysql_select_db($db_table) or die("Could not open Hartford Database. Error: ". mysql_error());等数据库,有两个单独的文件,如主文件通过require 'db1.php'; require 'db2.php';使用脚本的开头,从那里一切都使用变量作为参考,如 $table.column 和 $db1.$table1

标签: mysql database search join


【解决方案1】:

假设您运行的用户具有查看两个数据库的正确权限,那么您应该能够通过使用 'dbname.tablename' 语法加入表来做到这一点,如下所示:

select t1.*, t2.*
from database1.table1 t1
LEFT OUTER JOIN database2.table2 t2 ON t1.id = t2.id

这将为您提供表 A 中的所有行,以及表 b 中匹配行的位置,以及那里的匹配行(如果没有匹配行,则为空)..

【讨论】:

  • @Andrey:这是我的完整查询SELECT $table.*, $table2.* FROM $db1.$table1 LEFT OUTER JOIN $db2.table2 ON $table1.id = $table2.id ORDER BY $table1.$sortbyme $o LIMIT $offset, $rowsPerPage
  • @Tumharyyaaden:t1 和 t2 只是 table1 和 table2 的别名。您只需要 1 个连接到 db1 或 db2。您连接的用户也需要拥有其他数据库的权限。数据库将负责为您连接到另一个数据库。您收到的错误消息表明您的用户没有 db1 的权限..
  • @Tumharyyaaden:我猜你可能这样做了......但我的意思是你连接的用户名,而不是你自己。假设您以 user1 身份连接到 db1。最简单的方法是授予 user1 访问权限以从 db2 中的表中进行选择。然后使用上面的语法。如果您没有能力这样做,那么您需要做一些类似于您现在正在做的事情,在这种情况下,您可能会发现自己在代码中执行连接比一次查询 db2 1 行更快
  • @StevieG:它仍然对我不起作用,但你对这个方法有钱。所以谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2019-10-19
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多