首页 > 解决方案 > PHP“变量包装器”作为一个数组用于多个数据库的 SQL 查询

问题描述

我有 50 个具有相同设计和结构的数据库。为了对其中包含的数千个变量进行基准数据分析和评估,我需要构建 SQL 查询。我有一个 SuperAdmin 帐户,有权通过 SSH 访问查看所有这些数据库。

现在,我可以使用这样的 UNION ALL 编写 SQL 查询,将一个又一个数据库中的数据组合起来(简化):

SELECT * FROM db1.table WHERE blah
UNION ALL
SELECT * FROM db2.table WHERE blah
UNION ALL
[...]
SELECT * FROM db50.table WHERE blah

这些查询位于 PHP 环境中,并且工作起来很神奇——我得到了我想要的所有数据分析和评估。

但:

然而,在我的例子中,一个 SQL 查询有大约 1000 行查询语句和条件代码。以这种顺序方式查询 50 个数据库意味着我的查询变得非常大,我必须做很多容易出错的复制 SQL 查询语句,每次都将“db1”调整为“db50”,另外还有很多 JOIN,所以它变得无所适从,变得非常耗时。

我的问题:

有没有一种方法可以告诉 PHP 将所有“dbx”放入一个数组中,然后通过使用 foreach 或 while 或类似语句将“dbx”从 1 交换为 50 来重复一个基本的 SQL 查询?

如:

<?php
    function getResultValuesFromDatabase() {
        global $DATABASE;

        $db1 = "database1";
        $db2 = "database2";
        [...]
        $db50 = "database50";
        $no_of_databases = array($db1, $db2, [...], $db50);
        foreach ($no_of_databases as $value) {
            $sql_query = "SELECT * FROM $value.table WHERE blah";
        }
        $rQuery = mysql_query($qQuery, $oDatabase);
        $result = array("count" => mysql_num_rows($rQuery ), "result" => $rQuery);
        return $result;
    }

我收到一个影响重复过程的错误。谁能告诉我我的逻辑错误在哪里?

标签: phpmysqlarrays

解决方案


您不需要名称数组。因为它们都是相似的,所以一个简单的for循环应该适合你。您还需要在循环中进行查询并在返回结果之前累积结果。

for ($db = 1;$db <= 50;$db++) {
     $sql_query = 'SELECT * FROM database' . str_pad($db,2,'0',STR_PAD_LEFT) . '.table WHERE blah';
     $rQuery = mysql_query($qQuery, $oDatabase);
     $result[] = array("count" => mysql_num_rows($rQuery ), "result" => $rQuery);
}
return $result;

推荐阅读