使用新标记

时间:2018-05-10 18:34:25

标签: mysql coldfusion lucee

我使用的是Lucee 5.x和Maria DB(MySQL)。

我有一个用户提供的逗号分隔列表。我需要查询数据库,如果项目不在数据库中,我需要添加它。

用户提供的列表
green blue purple white

数据库项目
black white red blue pink orange lime

预计数据库列表不会增长到超过30个项目,但最终用户总是会发现“创意”。如何使用我们提供的工具。

因此,使用上面提供的用户提供的列表,只应将greenpurple添加到数据库中。

我是否将用户提供的列表与数据库项进行比较,反之亦然?如果用户提供的列表计数超过数据库中的数量,则进程是否会更改(这意味着用户是否提交了10个项目,而数据库只包含5个项目)?我不确定哪个循环是确定哪些项目是新项目的更好方法。需要在cfscript中,我正在查看此处概述的循环选项(https://www.petefreitag.com/cheatsheets/coldfusion/cfscript/

FOR循环
FOR IN Loop(阵列)
FOR IN循环(查询)

我尝试了NOT IN的MySQL,但除了新的数据库值之外,还给我留下了现有的数据库值。我知道这应该很简单,我在某个地方使这个问题变得复杂和/或过于接近问题而无法看到解决方案。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

  • 获取包含数据库中现有项目的列表
  • 追加用户提供的列表
  • 删除重复项
  • 如果添加了项目,则更新数据库
<cfscript>

    var userItems = '"green","blue","purple","white"';
    var dbItems = '"black","white","red","blue","pink","orange","lime"';
    var result = ListRemoveDuplicates( ListAppend(dbItems, userItems));

    if (ListLen(result) neq ListLen(dbItems)) {
      // update db
    }

</cfscript>
  

更新(仅限新项目)

<cfscript>

    var userItems = '"green","blue","purple","white"';
    var dbItems = '"black","white","red","blue","pink","orange","lime"';
    var newItems = '';

    ListEach(userItems, function (item) {
        if (not ListFind(dbItems, item)) {
          newItems = ListAppend(newItems, item);
        }
    })

</cfscript>

trycf.com要点:
https://trycf.com/gist/f6a44821165338b3c10b7808606979e6/lucee5?theme=monokai