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

pkln4tw6  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(481)

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

  1. select * from myapp.GGG_myphone where department_name
  2.         like (select distinct department_name from myapp.GGG_myphone
  3.          where department_nbr like '#DEPT_FUND_NBR#'  )
nwlls2ji

nwlls2ji1#

@斯科特,我假设:
select查询中的每一行都表示一个类似于所示的json。毕竟,列名与json中的键匹配。
您已经或打算存储许多这样的json,每个json都作为一个文件。我从你的文件读取代码推断出这一点。假设这些文件存储在一个名为“jsons”的目录中。
您需要的是coldfusion代码,它将选择与select查询中的条件匹配的json文件。

  1. <cfscript>
  2. array function getJSONByDeptName(string departmentNbr) {
  3. var JsonFiles = arrayNew(1);
  4. var JsonFile = "";
  5. var JsonData = {};
  6. var collectionOfMatchingJsonData = arrayNew(1);
  7. var departmentNamesList = "";
  8. /* Here, we assume the JSON files are stored in subdirectory 'jsons' within current directory*/
  9. JsonFiles = directorylist(expandPath('jsons'));
  10. if (arrayLen(JsonFiles) gt 0) {
  11. for (var fileNumber=1; fileNumber lte arrayLen(JsonFiles); fileNumber=fileNumber+1) {
  12. /* Get each file in turn*/
  13. JsonFile = fileRead(JsonFiles[fileNumber]);
  14. /*Read its JSON content. The result is an array containing one item of type struct*/
  15. jsonData = deserializeJSON(JsonFile);
  16. /* Reminder: jsonData[1] is a struct. Check whether the departmentNbr key in the struct
  17. matches the input value of departmentNbr.
  18. If it does, add the jsonData to the list, avoiding duplicate values of departmentName */
  19. if (jsonData[1].departmentNbr eq arguments.departmentNbr and ListFindNoCase(departmentNamesList, jsonData[1].departmentName) eq 0) {
  20. arrayAppend(collectionOfMatchingJsonData,jsonData)
  21. /* Add department name to list. */
  22. departmentNamesList = listAppend(departmentNamesList, jsonData[1].departmentName);
  23. }
  24. }
  25. }
  26. return collectionOfMatchingJsonData;
  27. }
  28. // Test it, using departmentNbr '1982'
  29. writedump(getJSONByDeptName('1982'));
  30. </cfscript>
展开查看全部
bprjcwpo

bprjcwpo2#

这是一个评论,而不是一个答案,但这里去。你想这么做吗

  1. <cfscript>
  2. jsonData = [...];
  3. filteredJsonData = jsonData.filter(function(row) {
  4. return row.department_nbr == variables.DEPT_FUND_NBR;
  5. })
  6. </cfscript>

arrayfilter()函数的作用是返回一个新数组,它是原始数组的子集。内部函数必须返回true或false。如果是真的,它将成为新数组的一部分。我使用成员函数方法是因为我不喜欢打字。
更多信息。在arrayfilter()上,请参见https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arrayfilter.html
注意:我们必须把 dept_fund_nbr 进入内部函数可见的范围。很可能您的代码有一个更好的范围。

相关问题