我可以在MySQL中使用參數(shù)創(chuàng)建視圖嗎?
我有這樣的看法:CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = 2;我想使其更通用,這意味著將2更改為變量。我嘗試了這個:CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = @MyVariable;但是MySQL不允許這樣做。我發(fā)現(xiàn)了一個丑陋的解決方法:CREATE FUNCTION GetMyVariable() RETURNS INTEGER DETERMINISTIC NO SQLBEGIN RETURN @MyVariable; END|然后視圖是:CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = GetMyVariable();但是它看起來確實很糟糕,用法也很糟糕-我必須在每次使用視圖之前設(shè)置@MyVariable。有沒有一種解決方案,我可以這樣使用:SELECT Column FROM MyView(2) WHERE (...)具體情況如下:我有一個表,用于存儲有關(guān)拒絕請求的信息:CREATE TABLE Denial( Id INTEGER UNSIGNED AUTO_INCREMENT, PRIMARY KEY(Id), DateTime DATETIME NOT NULL, FeatureId MEDIUMINT UNSIGNED NOT NULL, FOREIGN KEY (FeatureId) REFERENCES Feature (Id) ON UPDATE CASCADE ON DELETE RESTRICT, UserHostId MEDIUMINT UNSIGNED NOT NULL, FOREIGN KEY (UserHostId) REFERENCES UserHost (Id) ON UPDATE CASCADE ON DELETE RESTRICT, Multiplicity MEDIUMINT UNSIGNED NOT NULL DEFAULT 1, UNIQUE INDEX DenialIndex (FeatureId, DateTime, UserHostId)) ENGINE = InnoDB;多重性是在同一秒內(nèi)記錄的多個相同請求。我想顯示一個拒絕列表,但是有時候,當(dāng)應(yīng)用程序被拒絕時,它會重試幾次以確保。因此,通常,當(dāng)同一用戶在幾秒鐘內(nèi)對同一功能拒絕3次時,實際上是一次拒絕。如果我們還有更多資源可以滿足此請求,則不會發(fā)生接下來的兩次拒絕。因此,我們希望將拒絕項分組到報告中,從而允許用戶指定拒絕項的分組時間。例如,如果我們在時間戳中有拒絕(針對功能1上的用戶1):1,2,24,26,27,45,并且用戶希望將彼此之間相距不超過4秒的拒絕分組,則他應(yīng)該得到如下信息: 1(x2),24(x3),45(x1)。我們可以假設(shè),實際拒絕之間的間隔比重復(fù)之間的間隔大得多。CREATE FUNCTION GetDenialMergingTime() RETURNS INTEGER UNSIGNED DETERMINISTIC NO SQLBEGIN IF ISNULL(@DenialMergingTime) THEN RETURN 0; ELSE RETURN @DenialMergingTime; END IF;END|然后,要顯示用戶1和2拒絕功能3和4每5秒合并的拒絕,您要做的就是:SET @DenialMergingTime := 5;SELECT GroupTime, FeatureId, UserHostId, MultiplicitySum FROM MergedDenials WHERE UserHostId IN (1, 2) AND FeatureId IN (3, 4);我使用視圖是因為它很容易過濾數(shù)據(jù)并在jQuery網(wǎng)格中顯式使用它,自動排序,限制記錄數(shù)等。但這只是一個丑陋的解決方法。有適當(dāng)?shù)姆椒▉碜龅竭@一點嗎?
查看完整描述