簡體   English   中英

用以下數據庫布局在mysql中創建視圖的最佳方法是什么?

[英]What would the best way to be to create a view in mysql with the following database layouts?

我已經看過一堆mysql視圖示例,因此我猜想我可能做不到。

我有多個數據庫:db1,db2,db3 .......每個都有一個表:quotes相同表中的列: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 |

平均列將以分鍾為單位,我有查詢來獲取計算結果,但是當我嘗試將其放入視圖時,我知道我做錯了。

有人有例子嗎?

您有一個查詢來生成所需的結果集,大概是從多個數據庫之一中生成的。 假設它是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說您將無法編寫成功引用系統中所有數據庫的並集的查詢時,他是正確的。 您將必須引導該操作。

  1. 編寫一個查詢(可能使用information_schema.TABLES )來編寫您的CREATE VIEW AS...查詢,或其他引用您所有數據庫的查詢。

  2. 運行您所做的查詢。

您可以在php程序中創建或運行它,也可以使用MySQL的服務器端預編寫語句 (與mysqliPDO 的預編寫語句不同)創建和運行它。

訣竅是使工作逐步進行。

專家提示:眾所周知,很難為每個客戶擴展數據庫。 您變得越成功,就越難。 這不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM