2009-05-03 16 views
0

我有一个来自数据库A,表A(AA)的查询中的用户标识数组。关于在不同登录数据库之间检索相关数据的建议?

我有数据库B,表A(BA)中的主要用户数据库。

对于从AA返回的结果数组中的每个用户标识,我想从BA中检索该用户标识的名和姓。

不同的用户帐户控制每个数据库。不幸的是每个登录都不能拥有每个数据库的权限。

问题:如何以最少的查询和/或处理时间检索第一个和最后一个?数组中有20个用户?阵列中有20,000个用户?如果适用,高出任何数量级?

使用PHP 5/MySQL的5

+0

对于有权访问的另一个数据库帐户甚至没有_possibility_。将两个表结合在一起的视图? – VolkerK 2009-05-03 10:58:49

回答

2

只要数据库是在同一台服务器上只使用一个跨数据库连接。用于访问数据的数据库登录也需要对两个数据库都有权限。喜欢的东西:

SELECT AA.userID, BA.first, BA.last 
FROM databasename.schema.table AA 
INNER JOIN databasename.schema.table BA ON AA.userID = BA.userID 

在回应评论:

我不认为我正确地阅读多次登录的一部分,对不起。您不能在一个连接上使用两个不同的mySQL登录名。如果你需要做多个查询,你只有三个选择。 A)遍历第一个结果集并运行多个查询。 B)运行一个查询,该查询使用带有userID IN(@firstResultSet)的WHERE子句并传入第一个结果集。 C)从第二个数据库中选择所有内容并将其加入代码中。

所有这三个选项都不是很好,所以我会问,为什么不能在两个DB之一上更改用户权限?我还会问,为什么你需要选择20,000个用户的名字和ID?除非这是某种类型的数据转储,否则我会寻找一种不同的方式来显示数据,这将更容易使用,查询密集度更低。

所有这一切,你选择哪一个选项将基于各种不同的情况。由于记录数少于1,000,我会使用选项B.对于更多的记录,我可能会使用选项C并尝试将两个结果集放入可以连接的东西(例如使用array_combine)。

+0

不幸的是,每个登录都无法拥有每个数据库的权限。 :( – Ian 2009-05-03 07:18:12

0

我认为他们在这里的关键是它应该有可能在两个数据库调用。

你的第一个从数据库中获得一个编号的,第二个将它们传递给数据库B.

我不知道MySQL的,但在SQLSERVER我会使用XML数据类型,并通过所有的将这些ID转换成使用它的语句。在xml数据类型之前,我已经用IN语句中的id构建了一些动态SQL。

SELECT用户ID FROM DatabaseA.TableA

遍历id和建立一个逗号分隔字符串。

“选择姓,姓由DataBaseB.TableA其中userid IN(” +的StringID +“)”

的问题,这是问心无愧20000点的id,你可能有一些性能问题与你的数据量发送。这是我在哪里使用XML数据类型,所以也许看看mysql有什么替代方式来传递ID列表。