我在数据库A,表A(AA)的查询中有一组用户ID。
我在数据库B中有主用户数据库,表A(BA)。
对于AA结果数组中返回的每个用户ID,我想从BA中检索该用户ID的名字和姓氏。
不同的用户帐户控制每个数据库。不幸的是,每个登录都无法拥有每个数据库的权限。
问题:如何以最少的查询和/或处理时间检索第一次和持续时间?阵列中有20个用户?阵列中有20,000个用户?如果适用,任何数量级都会更高?
使用php 5 / mysql 5.
答案 0 :(得分:2)
只要数据库位于同一台服务器上,只需使用跨数据库连接即可。用于访问数据的DB登录还需要两个数据库的权限。类似的东西:
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中选择所有内容并将它们加入代码中。
所有这三个选项都不是很好,所以我会问,为什么你不能在两个DB中的一个上更改用户权限?我也想问,为什么你需要选择20,000个用户的名字和ID?除非这是某种类型的数据转储,否则我会寻找一种不同的方式来显示更容易使用且查询密集度更低的数据。
所有这一切,无论您选择哪种方案,都将基于各种不同的情况。由于记录数量少于1,000,我会使用选项B.如果记录数量较多,我可能会使用选项C并尝试将两个结果集放入可以连接的内容中(例如使用array_combine)。
答案 1 :(得分:0)
我认为它们的关键在于它应该可以在两个数据库调用中使用。
第一个从数据库A获取id,第二个将它们传递给数据库B.
我不知道mysql,但是在sqlserver中我会使用xml数据类型并使用它将所有id传递给一个语句。在xml数据类型之前,我已经用IN语句中的id构建了一些动态SQL。
SELECT UserId FROM DatabaseA.TableA
循环访问id并构建逗号分隔的字符串。
“SELECT FirstName,姓氏来自DataBaseB.TableA WHERE UserId IN(”+ stringId +“)”
问题在于,如果您发送的数据量很大,那么您可能会遇到20,000个ID。这就是我使用XML数据类型的地方,所以也许看看mysql传递id列表的替代方案。