我想在mysql中構建參數視圖,以便我可以從PHP中指定參數來調用它。從PHP調用參數化MySQL視圖
有兩個視圖實際上是:
CREATE VIEW first_view AS
SELECT * FROM my_table t WHERE t.parameter < get_parameter();
CREATE VIEW second_view AS
SELECT * FROM first_view;
的get_parameter
功能實現如下::
CREATE FUNCTION get_parameter() RETURNS timestamp
NO SQL
DETERMINISTIC
BEGIN
IF ISNULL(@parameter) THEN
RETURN DATE(CURDATE()- INTERVAL DAYOFYEAR(CURDATE()) DAY);
ELSE
RETURN @parameter;
END IF;
END
它實現了參數,第二個,其剛剛從首先選擇第一個然後,我的查詢,如下所示:
SELECT v.* FROM (select @parameter := '2014-12-31' p) par, first_view v
這種查詢允許我指定參數,然後從first_view
中選擇所有內容。
當我在Mysql Workbench上運行這樣的查詢時,一切都按預期工作,而當我通過PHP運行它時,它會返回一個空集。
我在工作臺和PHP上使用相同的mysql用戶,所以它不應該是一個准許問題。
我怎樣才能得到PHP的結果集呢?
UPDATE
我已經Mysql的CLI客戶機上嘗試這種和PHP做它返回一個空集。
它看起來像查詢:
SELECT v.* FROM (select @parameter := '2014-12-31' p) par, first_view v
實際上並沒有設置@parameter
變量,或者至少不是第一次了。
Infact,如果我運行查詢兩次,那麼它的工作原理和視圖返回所期望的。 我通過發送從PHP兩條語句,MySQL的解決了這個問題:
首先,我設置的參數:
SET @parameter = '2014-12-31';
在我運行的實際查詢:
SELECT * FROM second_view;
現在我想知道:爲什麼第一個查詢沒有正確地實例化參數?
我的第一個猜測是,該聲明get_parameters()函數確定性可能是問題。您是否嘗試過,但沒有將其聲明爲DETERMINISTIC? – 2014-12-07 13:20:54
我試過聲明函數NOT DETERMINISTIC,現在查詢沒有事先設置變量。但爲什麼它有所作爲? – Dalen 2014-12-07 16:04:23