Создайте один динамический запрос для получения данных таблиц на основе вызова функции в Coldfusion - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу создать динамический запрос для получения данных таблиц.Используя этот динамический запрос, нам нужно выбрать все столбцы или необходимые столбцы.Нужно динамически присоединяться, где условие также.

1 Ответ

0 голосов
/ 27 сентября 2018

Мы можем создать один динамический запрос SELECT в Coldfusion.Ниже я добавил функцию CFC, это динамический запрос.Пожалуйста, отметьте это.

<cffunction name="select" access="public" returntype="Query">
        <cfargument name="tableName" type="string" required="true">
        <cfargument name="joinType" type="array" required="false">
        <cfargument name="conditionType" type="array" required="false">
        <cfargument name="subQuery" type="array" required="false">
        <cfargument name="orderBy" type="string" required="false">
        <cfargument name="groupBy" type="string" required="false">
        <cfargument name="neededColumns" type="string" required="false">

        <cfquery name="selectQ">
            SELECT
                <cfif len(arguments.neededColumns)>
                    #arguments.neededColumns#
                <cfelse>
                    *
                </cfif>
                <cfif structKeyExists(arguments, "subQuery")>
                    <cfloop array="#arguments.subQuery#" index="i">
                        ,#PreserveSingleQuotes(i)#
                    </cfloop>
                </cfif>
            FROM
                #arguments.tableName#
                <cfif structKeyExists(arguments, "joinType") AND !ArrayIsEmpty(arguments.joinType)>
                    <cfloop array="#arguments.joinType#" index="i">
                        #i.type# JOIN #i.table# #i.alias# ON #i.primaryColumn# = #i.alias#.#i.secondaryColumn#
                    </cfloop>
                </cfif>
            WHERE 1=1
                <cfif structKeyExists(arguments, "conditionType") AND !ArrayIsEmpty(arguments.conditionType)>
                    <cfloop array="#arguments.conditionType#" index="i">
                        AND #i.column#
                        <cfif structKeyExists(i, "symbol")>
                            #i.symbol#
                        <cfelse>
                            =
                        </cfif>
                        <cfif isNumeric(i.value)>
                            <cfqueryparam value="#i.value#" cfsqltype="cf_sql_numeric">
                        <cfelseif isDate(i.value)>
                            <cfqueryparam value="#i.value#" cfsqltype="cf_sql_timestamp">
                        <cfelse>
                            <cfqueryparam value="#i.value#" cfsqltype="cf_sql_varchar">
                        </cfif>
                    </cfloop>
                </cfif>
                <cfif structKeyExists(arguments, "groupBy") AND len(arguments.groupBy)>
                    GROUP BY #arguments.groupBy#
                </cfif>
                <cfif structKeyExists(arguments, "orderBy") AND len(arguments.orderBy)>
                    #arguments.orderBy#
                </cfif>
        </cfquery>
        <cfreturn selectQ>
    </cffunction>

Ниже приведен код, объясняющий, как вызвать эту функцию выше и как отправить аргументы этой функции.

<cfset getAllDatas = application.base.get(
        tableName = "Users U",
        joinType = [
          {"table" : "customers", "type" : "INNER", "alias" : "C", "primaryColumn" : "U.user_id" , "secondaryColumn" : "userid"},
          {"table" : "customerType", "type" : "INNER", "alias" : "CT", "primaryColumn" : "C.eventid" , "secondaryColumn" : "eventid"}
        ],
        subQuery = [
          "(SELECT COUNT(*) FROM Participants WHERE UserID = #session.UserID# AND status = 'attended') AS count"
        ],
        orderBy  = " ORDER BY C.CreatedDate DESC",
        groupBy  = "C.CreatedDate",
        conditionType = [
          { "column" : "UserID", "value" : session.userID},
          { "column" : "C.status", "value" : "Attended"}
        ]
 )/>

Ребята, если у вас есть идеи, пожалуйста,Поделись со мной.

Заранее спасибо!

...