php - 使用以下数据库布局在 mysql 中创建 View 的最佳方法是什么?

标签 php mysql view mariadb

我已经浏览了大量的 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 。当然,这仅在所有数据库都位于同一服务器上时才有效(或者如果您对远程表引用执行某些操作,您可以查找远程表引用)。

您不能在数据库或表名称的查询中使用变量。这些必须是常量文本。雷蒙德说您将无法编写成功引用系统中所有数据库的并集的查询,这是正确的。您必须引导该操作。

  1. 编写一个查询(可能使用 information_schema.TABLES )来编写您的 CREATE VIEW AS...查询,或引用所有数据库的其他查询。

  2. 运行您所做的查询。

您可以在 php 程序中创建并运行它,或者使用 MySQL's server-side flavor of prepared statements (与 mysqliPDO 中准备好的语句不同)。

诀窍是让事情逐步发挥作用。

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

关于php - 使用以下数据库布局在 mysql 中创建 View 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496461/

相关文章:

java - 如何删除(常规) View 的背景 (Android)

MySQL:表与 View 与例程

php - 使用php和mysql进行数据过滤

php - Yii2 - 使用 DateValidator 验证 ISO 8601 日期时间格式

javascript - 如何修复 PHP 和 MYSQL 代码错误从数据库中错误的表中选择

mysql - 我可以为 MySQL 客户端中的所有选择设置默认 LIMIT 吗?

python - Python3.1 中的 View ?

php - php 文件的 500 内部服务器错误,而不是 html

php - Elasticsearch完全匹配字段

php - 尝试让 php foreach 工作时出现问题