我想在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