当前位置: 首页 > 面试题库 >

按存储过程参数排序

百里鸿祯
2023-03-14
问题内容

我通过用户给定的参数对存储过程进行排序时遇到问题,我尝试阅读,但是尝试过的解决方案不起作用。

那么,有人可以帮助我吗?我希望可以从Group_concat中按类型对它进行排序。如果我以Harcoded形式输入它(例如,ORDER BY
Type1,ORDER BY Type2等),它将起作用。但是我想要这样的东西(ORDER BY @specificStat)。

CREATE PROCEDURE getSpecificStatsBySeason(IN khID INT(11), IN seasonName varchar(40), IN specificStat INT(11))
BEGIN

SET @sql = NULL;
SET @khID = khID;
SET @seasonName = seasonName;
SET @specificStat = specificStat;

SELECT
  GROUP_CONCAT(DISTINCT CONCAT('SUM(IF(em.eventTypeID = ',
      et.eventTypeID, ', 1, 0)) AS Type',
      et.eventTypeID )
  ) INTO @sql
FROM  eventTypes       AS et, `eventType-R-kh` AS eRk, kh AS kh WHERE et.eventTypeID = eRk.eventTypeID AND eRk.kh = kh.kh AND kh.khID = @khID;

SET @sql = CONCAT('SELECT u.userID, ud.firstname, ud.lastname,', @sql,
                  ',
                  IFNULL((SELECT COUNT(s.activityID)
                          FROM activity AS a1, signup AS s
                          WHERE u.userid = s.userid
                          AND s.activityID = a1.activityID
                          AND a1.khID = @khID
                            AND s.answer = 1
                            AND se.seasonName = @seasonName
          AND a1.activityDate BETWEEN se.seasonStart AND se.seasonEnd
                  AND a1.activityDate <= NOW()), 0) AS matchCount
                  FROM userData AS ud, userInfo AS u
                  LEFT JOIN activity      AS  a ON a.khID = @khID
                  RIGHT JOIN season AS se ON se.seasonName = @seasonName
          AND a.activityDate BETWEEN se.seasonStart AND se.seasonEnd
                  LEFT JOIN `eventMatch`       AS em ON em.userid = u.userid
                  AND em.activityID = a.activityID
                  LEFT JOIN activityMatch AS am ON a.activityID = am.activityID 
                  WHERE u.khID  = @khID
                  AND u.userID = ud.userID
                  GROUP BY u.UserID  
                  ORDER BY  @specificStat  ;');


prepare stmt 
FROM @sql;

execute stmt;

问题答案:

改用这个:

...
...
  AND u.userID = ud.userID
              GROUP BY u.UserID  
              ORDER BY ',   @specificStat, '  ;');


 类似资料:
  • 我正在开发一个框架,其中我是一个使用动态创建的参数调用存储过程。我正在运行时构建参数集合。 当我将参数传递给存储过程时,会出现此问题,但存储过程不接受此类参数。 例如,我的存储过程是: 调用存储过程: 这会引发以下错误: 这在 Sybase ASE 中工作正常,它只是忽略任何其他参数。这可以通过MSSQL服务器2008实现吗?任何帮助,非常感谢。谢谢

  • 问题内容: 我一直在寻找如何从经典的asp调用存储过程并将参数传递给它的方法,这是我的存储过程,可以正常工作 和到目前为止的我的vbscript代码- 问题答案: 您正在寻找Parameters属性。 哦,劳迪,我又在写VBScript。

  • 问题内容: 我有一个来自此(google book )的mysql存储过程,一个例子是这样的: 该程序编译正常。(我在ubuntu中使用MySQL查询浏览器)。 但是,当我调用该过程时: (也在查询浏览器中) 它返回一个错误: 为什么这个例子不起作用? 问题答案: 无法复制。对我来说效果很好: 也许您应该粘贴整个错误消息,而不是对其进行汇总。

  • 问题内容: 我在我的应用程序中收到一个错误,我不知道如何解决它。这是代码: 我收到的错误是与。它说 InvalidCastException无法将参数值从任务转换为字符串。 我认为这与我尝试放置位置有关(在if语句内部),但我不确定。任何帮助将非常感激。 谢谢, 马特 问题答案: 我的猜测是 t不是字符串吗?

  • 问题内容: 我想知道是否可以将参数传递给mysql存储过程,并将该参数用作DATE_SUB函数的 单位 参数。看来 unit 参数是一个保留字,所以我不知道unit是否有类型。 我正在尝试做的事例: UPDATE 1 我尝试使用prepare语句,可以创建存储的proc。 当我执行它时:CALL test(’WEEK’); 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行

  • 本文向大家介绍Sql Server 存储过程调用存储过程接收输出参数返回值,包括了Sql Server 存储过程调用存储过程接收输出参数返回值的使用技巧和注意事项,需要的朋友参考一下 创建存储过程: 接收输出参数: 2,带返回值 创建存储过程: 接收返回值: 以上所述是小编给大家介绍的Sql Server 存储过程调用存储过程接收输出参数返回值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小