我已经浏览了大量的 mysql View 示例,所以我猜测我想要做的事情可能是不可能的。
我有多个数据库:db1、db2、db3 ...... 每一个都有一个表:quotes 相同表中的列:DateSubscribed DATETIME、TimeFinished DATETIME、Status VARCHAR(64)
我正在尝试获取一个 View ,当添加新数据库时,我将创建或重新创建该 View ,该 View 可以根据状态(错误、超时、成功)在提交日期和完成时间之间进行一些计算
我正在寻找的结果是这样的:
Database|AvgTimeLast24Hours|AvgTimeLastWeek|AvgTimeLastMonth
|db1|60|48 | 40 |
| db2 | 185 | 125 | 105
|db3 | 14 | 18 | 23 |
平均列数以分钟为单位,我有查询来获取计算结果,但当我尝试将其放入 View 中时,我知道我做错了。
有人有例子吗?
最佳答案
您有一个查询来生成所需的结果集,可能来自多个数据库之一。假设它是SELECT SUM(foo) foo, baz FROM quotes ORDER BY baz
。 (我知道不是,但您没有显示您的查询。)
然后,在同一个数据库中,您可以轻松地将其创建为 View 。
CREATE VIEW summary
AS
SELECT SUM(foo) foo, baz FROM quotes ORDER BY baz;
让该 View 正常工作。
然后您可以创建另一个 View ,合并各个数据库中的表。
CREATE VIEW all_quotes AS
SELECT * FROM db1.quotes
UNION ALL SELECT * FROM db2.quotes
UNION ALL SELECT * FROM db3.quotes
/* etc etc ad nauseam */
然后将您的第一个 View 更改为引用 all_quotes
而不是quotes
。当然,这仅在所有数据库都位于同一服务器上时才有效(或者如果您对远程表引用执行某些操作,您可以查找远程表引用)。
您不能在数据库或表名称的查询中使用变量。这些必须是常量文本。雷蒙德说您将无法编写成功引用系统中所有数据库的并集的查询,这是正确的。您必须引导该操作。
编写一个查询(可能使用
information_schema.TABLES
)来编写您的CREATE VIEW AS...
查询,或引用所有数据库的其他查询。运行您所做的查询。
您可以在 php 程序中创建并运行它,或者使用 MySQL's server-side flavor of prepared statements (与 mysqli
或 PDO
中准备好的语句不同)。
诀窍是让事情逐步发挥作用。
专业提示:每个客户的单独数据库很难扩展。你越成功,就越难。这可不好。
关于php - 使用以下数据库布局在 mysql 中创建 View 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496461/