有两个列表,需要将它们转换为查询

have two lists and need to convert them into query

我有两个单独的列表给我结果,我想在一个查询中转换这些单独的列表,我确实使用了 listoquery 来自 cflib ,但它只适用于 1,不是为了更多的查询。

我该怎么做,任何线索,不能使用 queryappend,因为我在 lucee

<cffunction name="listToQuery" access="public" returntype="query" output="false" 
    hint="Converts a list to a single-column query.">
    <cfargument name="list" type="string" required="yes" hint="List to convert.">
    <cfargument name="delimiters" type="string" required="no" default="," hint="Things that separate list elements.">
    <cfargument name="column_name" type="string" required="no" default="column" hint="Name to give query column.">

    <cfset var query = queryNew(arguments.column_name)>
    <cfset var index = ''>

    <cfloop list="#arguments.list#" index="index" delimiters="#arguments.delimiters#">
        <cfset queryAddRow(query)>
        <cfset querySetCell(query,arguments.column_name,index)>
    </cfloop>

    <cfreturn query>
</cffunction>

或者我有一个for循环

像这样

https://trycf.com/gist/28e9f2b8ff2992e0dc9f78709a0d2041/lucee5?theme=monokai

假设两个列表的长度相同,你可以这样做。

myQuery = QueryNew(dummy, varchar);
QueryAddColumn(myQuery, Column1, varchar, ListToArray(List1);
QueryAddColumn(myQuery, Column2, varchar, ListToArray(List2);
QueryDeleteColumn(myQuery, dummy);
<cfscript>

    list1 = '1,2,3,4,5,6,7,8';
    list2 = '5,5,5,5,7,7,4,4';

    result = queryNew("");

    queryAddListAsNewColumn(result, "id", list1);
    queryAddListAsNewColumn(result, "name", list1);
    queryAddListAsNewColumn(result, "cid", list2);

    writeDump(result);

    /*
     * Adds the provided list to the query as a new column. Automatically expands query records.
    */
    function queryAddListAsNewColumn(query, columnName, list) {

        // prepare list data
        LOCAL.data      = listToArray(ARGUMENTS.list);
        LOCAL.dataCount = arrayLen(LOCAL.data);

        // add new column to query
        queryAddColumn(ARGUMENTS.query, ARGUMENTS.columnName);

        // expand query if list to add exceeds the current record count
        LOCAL.rowDelta = (LOCAL.dataCount - ARGUMENTS.query.recordCount);
        if (LOCAL.rowDelta > 0) {
            queryAddRow(ARGUMENTS.query, LOCAL.rowDelta);
        }

        // add list data to each cell in the new column
        for (LOCAL.i = 1; LOCAL.i <= LOCAL.dataCount; LOCAL.i++) {
            querySetCell(ARGUMENTS.query, ARGUMENTS.columnName, LOCAL.data[LOCAL.i], LOCAL.i);
        }

        // returning isn't necessary because the passed query argument is a reference, return whatever suits your needs
        return ARGUMENTS.query;
    }

</cfscript>