如何在cfml/coldfusion中模仿sql语句逻辑?
How to mimic sql statement logic in cfml / coldfusion?
我遇到了一个问题,我试图将我的 sql 语句转换为在 cfml (cfscript>) 中执行相同的逻辑,所以,我试图模仿这个 sql 语句来在我的 cfscript 中显示结果。有人可以帮我解决这个问题吗?感谢您的帮助。
SQL:
select * from myapp.GGG_myphone where department_name
like (select distinct department_name from myapp.GGG_myphone
where department_nbr like '#DEPT_FUND_NBR#' )
这与其说是一个答案,不如说是一个评论,但这里是。你想这样做吗
<cfscript>
jsonData = [...];
filteredJsonData = jsonData.filter(function(row) {
return row.department_nbr == variables.DEPT_FUND_NBR;
})
</cfscript>
ArrayFilter() 函数的作用是return一个新数组,它是原始数组的一个子集。里面的函数必须 return true 或 false。如果为真,它将成为新数组的一部分。我使用了成员函数方法,因为我不喜欢打字。
了解更多信息。关于 ArrayFilter(),参见 https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arrayfilter.html
注意:我们必须将 dept_fund_nbr
放入内部函数可见的范围内。您的代码可能有更好的范围。
@Scott,我假设:
您的 select 查询中的每一行代表一个 JSON 类似于
你已经展示了。毕竟,列名与
JSON.
您已经或打算存储多个这样的 JSON,
每个作为一个文件。我从您的文件读取代码中推断出这一点。让我们说
文件存储在名为 'jsons'.
的目录中
您正在寻找的是 ColdFusion 代码,它将 select
JSON 个符合您 select 查询条件的文件。
<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 语句转换为在 cfml (cfscript>) 中执行相同的逻辑,所以,我试图模仿这个 sql 语句来在我的 cfscript 中显示结果。有人可以帮我解决这个问题吗?感谢您的帮助。
SQL:
select * from myapp.GGG_myphone where department_name
like (select distinct department_name from myapp.GGG_myphone
where department_nbr like '#DEPT_FUND_NBR#' )
这与其说是一个答案,不如说是一个评论,但这里是。你想这样做吗
<cfscript>
jsonData = [...];
filteredJsonData = jsonData.filter(function(row) {
return row.department_nbr == variables.DEPT_FUND_NBR;
})
</cfscript>
ArrayFilter() 函数的作用是return一个新数组,它是原始数组的一个子集。里面的函数必须 return true 或 false。如果为真,它将成为新数组的一部分。我使用了成员函数方法,因为我不喜欢打字。
了解更多信息。关于 ArrayFilter(),参见 https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arrayfilter.html
注意:我们必须将 dept_fund_nbr
放入内部函数可见的范围内。您的代码可能有更好的范围。
@Scott,我假设:
您的 select 查询中的每一行代表一个 JSON 类似于 你已经展示了。毕竟,列名与 JSON.
您已经或打算存储多个这样的 JSON, 每个作为一个文件。我从您的文件读取代码中推断出这一点。让我们说 文件存储在名为 'jsons'.
的目录中您正在寻找的是 ColdFusion 代码,它将 select JSON 个符合您 select 查询条件的文件。
<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>