使用以下数据库布局在 mysql 中创建视图的最佳方法是啥?
Posted
技术标签:
【中文标题】使用以下数据库布局在 mysql 中创建视图的最佳方法是啥?【英文标题】:What would the best way to be to create a view in mysql with the following database layouts?使用以下数据库布局在 mysql 中创建视图的最佳方法是什么? 【发布时间】:2018-09-25 10:53:08 【问题描述】:我已经浏览了大量的 mysql 视图示例,所以我猜测我想要做的事情可能是不可能的。
我有多个数据库:db1、db2、db3 ....... 每个都有一个表:引号 相同表中的列:DateSubmitted DATETIME、TimeFinished DATETIME、Status VARCHAR(64)
我正在尝试获取一个视图,以便在添加新数据库时创建或重新创建,该数据库可以根据状态(错误、超时、成功)在 DateSubmitted 和 TimeFinished 之间进行一些计算
我正在寻找的结果是这样的:
Database|AvgTimeLast24Hours|AvgTimeLastWeek|AvgTimeLastMonth
|db1|60|48 | 40 |
| db2 | 185 | 125 | 105
|db3 | 14 | 18 | 23 |
平均列将在几分钟内,我有查询来获取计算,但是当我尝试将其放入视图时,我知道我做错了。
有人有例子吗?
【问题讨论】:
"我有多个数据库:db1、db2、db3 .......每个都有一个表:引号相同表中的列:DateSubmitted DATETIME、TimeFinished DATETIME、Status VARCHAR(64)" Wierd现在设计导致您出现问题的原因.. 您可以做的是使用 information_schema.TABLES 并生成动态(使用联合所有)SQL并使用 PREPARE 和 EXECUTE 执行它我认为这是一个比制作视图更好的选择。 谢谢@RaymondNijland,我现在正在做类似的事情。我希望创建视图,以便其性能优于所有单个查询。 【参考方案1】:您有一个查询来生成您想要的结果集,大概来自您的多个数据库之一。假设它是 SELECT SUM(foo) foo, baz FROM quotes ORDER BY baz
。 (我知道不是,但您没有显示您的查询。)
然后,在同一个数据库中,您可以轻松地将其创建为视图。
CREATE VIEW summary
AS
SELECT SUM(foo) foo, baz FROM quotes ORDER BY baz;
让视图正常工作。
然后,您可以创建另一个视图,以合并各种数据库中的表。
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 */
然后将您的第一个视图更改为引用 all_quotes
而不是 quotes
。当然,这只有在所有数据库都在同一台服务器上时才有效(或者如果您使用远程表引用进行某些操作,您可以查找)。
您不能在查询数据库或表名称时使用变量。那些必须是常量文本。当 Raymond 说您将无法编写成功引用系统中所有数据库的联合的查询时,他是正确的。您必须引导该操作。
编写一个查询(可能使用information_schema.TABLES
)来编写您的CREATE VIEW AS...
查询或引用您所有数据库的其他查询。
运行您所做的查询。
您可以在 php 程序中创建和运行它,也可以使用 MySQL's server-side flavor of prepared statements(与 mysqli
或 PDO
中的准备语句不同)。
诀窍是让事情逐步进行。
专业提示:众所周知,每个客户的单独数据库很难扩展。你越成功,就越难。这不好。
【讨论】:
这是我正在寻找的建议。我今晚要做,会回复。以上是关于使用以下数据库布局在 mysql 中创建视图的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在具有自动布局的 Interface Builder 中创建的现有视图中添加视图?
在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?
在 ViewController 中创建选项卡视图的最佳方法是啥