【问题标题】:Any custom function for QueryappendQueryappend 的任何自定义函数
【发布时间】:2020-12-10 11:13:30
【问题描述】:

Queryappend 在 Coldfusion - 18 中,而不在 Coldfusion - 16 中。

任何人都可以为“Queryappend”建议任何自定义的coldfusoin函数

假设我有 2 个查询:

Query-1
select * from user where userid > 10 order by userid asc

Query-2
select * from user where userid < 10 order by userid desc

Query append should return folowing:

userid username 
11  AA
12  BB
13  CC
9   MM
8   NN
7   OO

提前致谢

【问题讨论】:

  • Ben Nadel 已经为您完成了这项工作(从 2006 年开始!)-ColdFusion QueryAppend( qOne, qTwo )。可能更高效的是直接从您对数据库的初始查询中使用UNION
  • @Miguel-F,您是否注意到两个 order by 子句不同?当我第一次回答这个问题时,我也没有。
  • 不,在您指出之前,我没有注意到这一点。也许是错字?组合结果示例都是升序的。

标签: coldfusion coldfusion-2016


【解决方案1】:

在早期版本的 ColdFusion 中模拟 queryAppend() 的最简单和最易读的解决方案是使用查询查询 (qoq),然后使用 union all 功能通过不提供附加结果 qoq ORDER BY 子句。

<cfquery name="query1" datasource="mydatasource">
    select * from user where userid > 10 order by userid asc
</cfquery>

<cfquery name="query2" datasource="mydatasource">
    select * from user where userid < 10 order by userid desc
</cfquery>

<!--- "Union all" the 2 result sets together in a qoq and don't supply an order by clause  --->
<cfquery name="queryAppend" dbtype="query">
    select * from query1
    union all
    select * from query2
</cfquery>

这是一个要点的工作示例https://trycf.com/gist/484d3ab19f52d81867dacdced47fad09/lucee5?theme=monokai

【讨论】:

    【解决方案2】:

    这是实现这一目标的一种方法。

    <cfscript>
    IDList1 = '1,2,3';
    IDList2 = '6,5,4';
    NameList1 = 'Fred,Wilma,Pebbles';
    NameList2 = 'Barney,Betty,Bam,Bam';
    Flinstones = QueryNew("UserID,UserName", 'integer,varchar');
    Rubbles = QueryNew("UserID,UserName", 'integer,varchar');
    
    for (i = 1; i <=3; i++) {
    QueryAddRow(Flinstones);
    QuerySetCell(Flinstones, 'UserID', i);
    
    QuerySetCell(Flinstones, 'UserName'
        , ListGetAt(NameList1, i));
    
    QueryAddRow(Rubbles);
    QuerySetCell(Rubbles, 'UserID'
        , ListGetAt(IDList2, i));
    
    QuerySetCell(Rubbles, 'UserName'
        , ListGetAt(NameList2, i));
        
    }
    </cfscript>
    
    <cfquery name="All" dbtype="query">
        select UserID, UserName
        from Flinstones
        order by UserID
    </cfquery>
    
    <cfloop query = "Rubbles">
        <cfset QueryAddRow(All)>
        <cfset QuerySetCell(All, 'UserId', UserId,
            All.recordcount)>
            <cfset QuerySetCell(All, 'UserName', UserName,
            All.recordcount)>
        
        
    </cfloop>
    
    <cfdump var="#all#">
    

    你可以玩弄它here

    将这个逻辑放入一个接受两个查询并返回第三个查询的函数中并不难。

    【讨论】:

    • 它认为查询的查询方法更干净。
    • 是的,但它没有提供正确的解决方案。问题中的两个查询具有不同的 order by 子句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多