第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在MySQL中使用參數(shù)創(chuàng)建視圖嗎?

我可以在MySQL中使用參數(shù)創(chuàng)建視圖嗎?

婷婷同學(xué)_ 2019-10-15 10:06:38
我有這樣的看法: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ù)姆椒▉碜龅竭@一點嗎?
查看完整描述

3 回答

?
斯蒂芬大帝

TA貢獻1827條經(jīng)驗 獲得超8個贊

實際上,如果您創(chuàng)建func:


create function p1() returns INTEGER DETERMINISTIC NO SQL return @p1;

并查看:


create view h_parm as

select * from sw_hardware_big where unit_id = p1() ;

然后,您可以使用參數(shù)調(diào)用視圖:


select s.* from (select @p1:=12 p) parm , h_parm s;

希望對您有所幫助。


查看完整回答
反對 回復(fù) 2019-10-15
?
長風(fēng)秋雁

TA貢獻1757條經(jīng)驗 獲得超7個贊

CREATE VIEW MyView AS

   SELECT Column, Value FROM Table;



SELECT Column FROM MyView WHERE Value = 1;

是MySQL中的正確解決方案,其他一些SQL則使您可以更精確地定義視圖。


注意:除非View非常復(fù)雜,否則MySQL將對其進行優(yōu)化。


查看完整回答
反對 回復(fù) 2019-10-15
?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

之前,我想出了一種不同的解決方法,該方法不使用存儲過程,而是使用參數(shù)表和一些connection_id()魔術(shù)。


編輯(從評論中復(fù)制)


創(chuàng)建一個包含稱為列的表connection_id(將其設(shè)為bigint)。在該表中放置用于視圖參數(shù)的列。將主鍵放在上connection_id。替換到參數(shù)表中,并用于CONNECTION_ID()填充connection_id值。在視圖中,使用交叉連接到參數(shù)表并放置WHERE param_table.connection_id = CONNECTION_ID()。這將與參數(shù)表中只有一行的交叉連接,這就是您想要的。然后,您可以使用where子句中的其他列,例如where orders.order_id = param_table.order_id。


查看完整回答
反對 回復(fù) 2019-10-15
  • 3 回答
  • 0 關(guān)注
  • 3662 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號