php - 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;
}
我收到一个影响重复过程的错误。谁能告诉我我的逻辑错误在哪里?
解决方案
您不需要名称数组。因为它们都是相似的,所以一个简单的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;
推荐阅读
- php - Symfony3 PostPersist 在本地工作,但不适用于生产
- python - Python如何在“→”字符处分割字符串
- amazon-web-services - 从多个 ec2 实例记录的 Route53
- material-ui - 在 Material-UI Input 中使用自定义 endAdornment 时的双 endAdornments
- c - 在 getline 函数中读取输入
- cocos2d-js - 如何处理 cocos2d-js 中的 []byte 流?
- git - Azure 数据工厂使用多个 Azure DevOps 存储库
- charts - 显示零线按条隐藏
- python - [int(x.strip()) for x in f] 的含义
- android - 如何从 Flutter 发送 ACTION_APPWIDGET_UPDATE 广播