选择和添加值会影响多个数据库

时间:2015-07-03 11:13:48

标签: mysql

- 漫步 -

我只是在脑海中经历一些假设的设置,以寻找一个可能的项目,每当我有空闲时间我都可以尝试这样做。基本上我只是想创建一个简单的动态网站,用户可以在其中注册和托管他们自己的用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 |
+-----------+------------+--------------+

1 个答案:

答案 0 :(得分:1)

我认为您不应该尝试在纯SQL中执行此操作。我认为最好的方法是在PHP代码(SHOW DATABASES;)中从服务器中选择数据库,然后收集您需要查询的数据库并在循环中执行以下操作:

$sql = 'SELECT  "'.$database.'", COUNT(ID), SUM(Points) FROM '.$database.'.USERS;'

将输出打印到表格(同时您也可以将其相加)然后打印总计。

如果你想将它缓存在一个表中,你可以为它创建一个表,在循环之前将其截断然后将结果插入其中(INSERT SELECT..)然后你可以从中选择结果。然后你可以添加一些cronjob或者每X分钟刷新一次表的东西。但我认为这些查询并不慢,需要缓存。 (如果你没有更多的数据库)。