使用以下数据库布局在 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(与 mysqliPDO 中的准备语句不同)。

诀窍是让事情逐步进行。

专业提示:众所周知,每个客户的单独数据库很难扩展。你越成功,就越难。这不好。

【讨论】:

这是我正在寻找的建议。我今晚要做,会回复。

以上是关于使用以下数据库布局在 mysql 中创建视图的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有自动布局的 Interface Builder 中创建的现有视图中添加视图?

在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?

如何在标题视图 iOS 中创建故事板布局多个视图?

在 ViewController 中创建选项卡视图的最佳方法是啥

如何在情节提要中创建 UIViewController 布局,然后在代码中使用它?

在布局中创建的列表视图中列出配对的蓝牙设备