[英]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說您將無法編寫成功引用系統中所有數據庫的並集的查詢時,他是正確的。 您將必須引導該操作。
編寫一個查詢(可能使用information_schema.TABLES
)來編寫您的CREATE VIEW AS...
查詢,或其他引用您所有數據庫的查詢。
運行您所做的查詢。
您可以在php程序中創建或運行它,也可以使用MySQL的服務器端預編寫語句 (與mysqli
或PDO
的預編寫語句不同)創建和運行它。
訣竅是使工作逐步進行。
專家提示:眾所周知,很難為每個客戶擴展數據庫。 您變得越成功,就越難。 這不好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.