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