- 漫步 -
我只是在脑海中经历一些假设的设置,以寻找一个可能的项目,每当我有空闲时间我都可以尝试这样做。基本上我只是想创建一个简单的动态网站,用户可以在其中注册和托管他们自己的用PHP生成的网站。我之前已经这样做了,但是现在我已经学到了很多关于OOP的知识我想再次尝试它而不会让源头变得一团糟。
- 结束漫步 -
基本上,我想知道的是如何跨多个数据库选择值并使用它们执行逻辑。例如,假设我有3个数据库,如下所示:
website_1
|_ Users
website_2
|_Users
website_3
|_Users
对于此示例,Users
表将包含两列。 (ID,Points),两者都是INT(11)NOT NULL值。
查询应返回数据库的名称,用户数量和用户点数之和。例如:
+-----------+------------+--------------+
| Database | user_count | total_points |
+-----------+------------+--------------+
| Website_1 | 3 | 2170 |
| Website_2 | 7 | 4020 |
| Website_3 | 2 | 1480 |
+-----------+------------+--------------+
经过一番研究后,我发现查询函数“DB_NAME()”应该返回数据库的名称,但是任何执行它的尝试都给了我以下错误:
FUNCTION website_1.DB_NAME不存在
编辑:DB_NAME()用于SQL SERVER :: DATABASE()在MySQL中返回受尊重的结果。
虽然我知道如何使用SELECT COUNT(ID)
和SELECT SUM(Points)
,但我不确定如何添加多个数据库中的值。我在这里完全失去了想法。我想到的查询的最终结果应如下所示:
+-----------+------------+--------------+
| Database | user_count | total_points |
+-----------+------------+--------------+
| Website_1 | 3 | 2170 |
| Website_2 | 7 | 4020 |
| Website_3 | 2 | 1480 |
+-----------+------------+--------------+
| Totals | 12 | 7670 |
+-----------+------------+--------------+
答案 0 :(得分:1)
我认为您不应该尝试在纯SQL中执行此操作。我认为最好的方法是在PHP代码(SHOW DATABASES;
)中从服务器中选择数据库,然后收集您需要查询的数据库并在循环中执行以下操作:
$sql = 'SELECT "'.$database.'", COUNT(ID), SUM(Points) FROM '.$database.'.USERS;'
将输出打印到表格(同时您也可以将其相加)然后打印总计。
如果你想将它缓存在一个表中,你可以为它创建一个表,在循环之前将其截断然后将结果插入其中(INSERT SELECT..
)然后你可以从中选择结果。然后你可以添加一些cronjob或者每X分钟刷新一次表的东西。但我认为这些查询并不慢,需要缓存。 (如果你没有更多的数据库)。