如何在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,我假设:

  1. 您的 select 查询中的每一行代表一个 JSON 类似于 你已经展示了。毕竟,列名与 JSON.

  2. 您已经或打算存储多个这样的 JSON, 每个作为一个文件。我从您的文件读取代码中推断出这一点。让我们说 文件存储在名为 'jsons'.

    的目录中
  3. 您正在寻找的是 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>