将参数传递给MySQL View

时间:2013-08-26 12:05:42

标签: php mysql sql mysqli

我正在尝试将参数传递给我创建的视图。 这是我的代码。

CREATE FUNCTION param1() RETURNS VARCHAR(50) DETERMINISTIC NO SQL RETURN @param1;
CREATE VIEW `view_stats` AS SELECT * FROM `history` WHERE fullname = param1() ;

这是我的查询

SELECT st.*, mtr.max_open_trades, mtr.max_draw_down FROM `view_stats` AS ST INNER JOIN `mtrecords` AS mtr ON st.login = mtr.login WHERE st.login=?

如何将参数传递给此查询的view_stats

3 个答案:

答案 0 :(得分:0)

SQL视图可以被视为在其他查询中包含固定子查询的简写,因此它无法执行普通查询无法执行的任何操作。如果参数需要在结构上改变正在运行的查询,那么您需要将整个查询放在某种函数中。

看起来你在这里所做的只是设置WHERE子句,所以你可以在视图中包含你要过滤的列,并在查询时使用WHERE子句。

答案 1 :(得分:0)

是的,您可以通过创建一个函数来从会话变量获取值来以简单的方式将参数传递给您的视图。有关该技术,请参阅https://www.stackoverflow.com/questions/14511760。这是我可能希望在之后模式化的创建功能的副本。 DELIMITER //

创建功能fn_getcase_id()
返回MEDIUMINT(11) 决定没有SQL BEGIN

请参阅stackoverflow.com/questions/14511760并阅读所有信息TWICE或MORE。 wh 04/13/2017

RETURN @sv_case_id;

END //

DELIMITER; 您需要创建一个类似的FN(每个变量一个)。

答案 2 :(得分:0)

这是一个简单的解决方案,可通过多个表之间的多个联接查询来改善VIEWS慢的问题。

DELIMITER ;;
CREATE PROCEDURE `SP_QUERY_VIEW_WITH_PARAMETERS`(IN p_having VARCHAR(300))
    COMMENT 'Executes the statement'
BEGIN
  SET @v_having = p_having;
  SET @v_sql=CONCAT('SELECT 
                    id    AS id_emp  ,
                    user  AS emp_name,
                    .
                    .
                    .
                    FROM table1
                    UNION ALL
                    SELECT 
                    idtifier_us    AS id_emp  ,
                    description    AS emp_name,
                    .
                    .
                    .
                    FROM table2');
SET @v_sql2 = CONCAT(@v_sql,@v_having);
  PREPARE stmt FROM @v_sql2;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END ;;
DELIMITER ;


CALL `SP_QUERY_VIEW_WITH_PARAMETERS`('having id_emp=63 and emp_name like ''VANDERLEI%'' and created_at between ''2019-05-01'' and ''2019-05-17''  ')

标题