如何在cfml/coldfusion中模拟sql语句逻辑?
我遇到了一个问题,我试图将我的sql语句转换为在cfml cfscript>中执行相同的逻辑,因此,我试图模拟此sql语句以在我的cfscript中显示结果。有人能帮我解决这个问题吗?谢谢你的帮助 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 ==
这与其说是一个答案,不如说是一个评论。你想这么做吗
<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>