【发布时间】:2014-02-12 07:44:17
【问题描述】:
1) 我正在制作一个显示汇总表的应用程序。单击每个摘要列时,我可以按升序或降序方式进行排序。例如有 5 列
2) 因此,在正常情况下,我将创建至少 5 个单独的 sql 查询来提供此功能。这可以创建为准备好的语句。
3) 但是创建一个动态的单个 sql 代码是否是一个好习惯,它可以考虑所有 where 条件和所有 order by,就像我在下面所做的那样?它将如何影响数据库性能?既然现在我不能写任何东西作为准备好的语句,我的执行会很慢吗?
请推荐 谢谢
CREATE DEFINER=`root`@`localhost` PROCEDURE `lSummary`(in fixedConditionList VARCHAR(1000),in OptionalConditionListForBackEnd VARCHAR(1000),in orderByColumnList VARCHAR(1000),in optionalJoinStatement VARCHAR(1000),in startLimit int( 10),在 OptionalFilterListWithAnd VARCHAR(1000),在 OptionalFilterListWithOr VARCHAR(1000),在 selectColumnList VARCHAR(10000),在 EndLimit int(10))
开始
DECLARE SQLStatement varchar(5000);
SET @SQLStatement = CONCAT("select l.lCaseId,concat('Staf') as canWrite,concat('Staf') as canShare,DATE_FORMAT(c.nextCourtDate,'%d-%m-%Y') as nextCourtDate, TIME_FORMAT(c.nextTime,'%h:%i %p') as nextTime,totalNumberOfSSteps,totalNumberOfSteps, ",selectColumnList," from 诉讼 l left join(selectrelatedToId,relatedToPrefix,count(*) as totalNumberOfSteps from flowsubmilestoneinuse group by relatedToId )作为 l.lCaseId=wt.relatedToId 上的 wt 和 l.lCasePrefix=wt.relatedToPrefix 左连接(从 flowsubmilestoneinuse 中选择 relatedToId,relatedToPrefix,count(*) 作为 totalNumberOfSSteps,其中里程碑ReachedById 不是 null group by relatedToId )作为 l.lCaseId 上的 wc =wc.relatedToId and l.lCasePrefix=wc.relatedToPrefix left join detail c on c.lCaseId= l.lCaseId ",optionalJoinStatement," where (",fixedConditionList,") AND (",OptionalConditionListForBackEnd,") AND (",OptionalFilterListWithAnd ,") AND (",OptionalFilterListWithOr,") order by ",orderByColumnList," Limit ",startLimit,EndLimit);
执行STMT;
结尾
【问题讨论】:
-
当然,准备好的语句可以在运行时接受动态参数。这不是问题。
-
嗨,如果可能的话,您能否指导我参考一些教程。谢谢