如何在cfml/coldfusion中模拟sql语句逻辑?

如何在cfml/coldfusion中模拟sql语句逻辑?,sql,coldfusion,cfml,Sql,Coldfusion,Cfml,我遇到了一个问题,我试图将我的sql语句转换为在cfml cfscript>中执行相同的逻辑,因此,我试图模拟此sql语句以在我的cfscript中显示结果。有人能帮我解决这个问题吗?谢谢你的帮助 SQL: 这与其说是一个答案,不如说是一个评论。你想这么做吗 <cfscript> jsonData = [...]; filteredJsonData = jsonData.filter(function(row) { return row.department_nbr ==

我遇到了一个问题,我试图将我的sql语句转换为在cfml cfscript>中执行相同的逻辑,因此,我试图模拟此sql语句以在我的cfscript中显示结果。有人能帮我解决这个问题吗?谢谢你的帮助

SQL:


这与其说是一个答案,不如说是一个评论。你想这么做吗

<cfscript>
jsonData = [...];


filteredJsonData = jsonData.filter(function(row) {
    return row.department_nbr == variables.DEPT_FUND_NBR; 
})
</cfscript>
ArrayFilter函数的作用是返回一个新数组,该数组是原始数组的子集。内部函数必须返回true或false。如果为真,它将成为新数组的一部分。我使用成员函数方法是因为我不喜欢打字

更多信息。在ArrayFilter上,请参见


注意:我们必须将dept\u fund\u nbr放入内部功能可见的范围内。您的代码可能有更好的范围。

@Scott,我假设:

select查询中的每一行表示一个类似于 你已经表现出来了。毕竟,列名与 JSON

您已经或打算存储大量此类JSON, 每个文件都是一个文件。我从您的文件读取代码推断出这一点。让我们说 文件存储在名为“jsons”的目录中

您要寻找的是ColdFusion代码,它将选择 与select查询中的条件匹配的JSON文件

<cfscript>
array function getJSONByDeptName(string departmentNbr)  {
var JsonFiles = arrayNew(1); 
var JsonFile = "";
var JsonData = {};
var collectionOfMatchingJsonData = arrayNew(1); 
var departmentNamesList = "";

/* Here, we assume the JSON files are stored in subdirectory 'jsons' within current directory*/
JsonFiles = directorylist(expandPath('jsons'));

if (arrayLen(JsonFiles) gt 0) {
    for (var fileNumber=1; fileNumber lte arrayLen(JsonFiles); fileNumber=fileNumber+1) {
        /* Get each file in turn*/
        JsonFile = fileRead(JsonFiles[fileNumber]);

        /*Read its JSON content. The result is an array containing one item of type struct*/
        jsonData = deserializeJSON(JsonFile);

        /* Reminder: jsonData[1] is a struct. Check whether the departmentNbr key in the struct 
           matches the input value of departmentNbr. 
           If it does, add the jsonData to the list, avoiding duplicate values of departmentName */     
        if (jsonData[1].departmentNbr eq arguments.departmentNbr and ListFindNoCase(departmentNamesList, jsonData[1].departmentName) eq 0) {
            arrayAppend(collectionOfMatchingJsonData,jsonData)

            /* Add department name to list.  */
            departmentNamesList = listAppend(departmentNamesList, jsonData[1].departmentName);

        }

    }

}

return collectionOfMatchingJsonData;    
}

 // Test it, using departmentNbr '1982' 
 writedump(getJSONByDeptName('1982'));
 </cfscript>

与您的问题无关,但如果子查询返回多行,您的sql查询将崩溃。看起来您正在尝试筛选数组。是的,类似于此。只是想模仿我在sql语句中所做的,但是在cfml CFScript中,您使用的是什么版本的ColdFusion?这可能会影响任何潜在的解决方案。这只是在CF中过滤数据的练习,还是您试图避免过滤数据库中可能更合适的数据?@Scott,您的JSON是不正确的。您应该在末尾添加]我的解决方案不完整,请在您的数据上尝试一些东西。我想我的建议会让你达到75%,但必须在剩下的空白处填上。我上面的评论有用吗?你还需要填补哪些空白?谢谢你的回答。但是,当我将您的代码放在当前代码中时,writeDump会显示一个空数组,并快速询问是不是获取了sql语句select*?@Scott中的所有字段,路径很可能不匹配。您的JSON文件是否存储在名为“jsons”的目录中?该目录是否与包含上述代码的CFM页面位于同一位置?JSON文件存储在桌面上,代码文件存储在文件夹中。上述解决方案获取每个符合departmentNbr标准的JSON文件中包含的所有字段。
<cfscript>
array function getJSONByDeptName(string departmentNbr)  {
var JsonFiles = arrayNew(1); 
var JsonFile = "";
var JsonData = {};
var collectionOfMatchingJsonData = arrayNew(1); 
var departmentNamesList = "";

/* Here, we assume the JSON files are stored in subdirectory 'jsons' within current directory*/
JsonFiles = directorylist(expandPath('jsons'));

if (arrayLen(JsonFiles) gt 0) {
    for (var fileNumber=1; fileNumber lte arrayLen(JsonFiles); fileNumber=fileNumber+1) {
        /* Get each file in turn*/
        JsonFile = fileRead(JsonFiles[fileNumber]);

        /*Read its JSON content. The result is an array containing one item of type struct*/
        jsonData = deserializeJSON(JsonFile);

        /* Reminder: jsonData[1] is a struct. Check whether the departmentNbr key in the struct 
           matches the input value of departmentNbr. 
           If it does, add the jsonData to the list, avoiding duplicate values of departmentName */     
        if (jsonData[1].departmentNbr eq arguments.departmentNbr and ListFindNoCase(departmentNamesList, jsonData[1].departmentName) eq 0) {
            arrayAppend(collectionOfMatchingJsonData,jsonData)

            /* Add department name to list.  */
            departmentNamesList = listAppend(departmentNamesList, jsonData[1].departmentName);

        }

    }

}

return collectionOfMatchingJsonData;    
}

 // Test it, using departmentNbr '1982' 
 writedump(getJSONByDeptName('1982'));
 </cfscript>