我使用的是Lucee 5.x和Maria DB(MySQL)。
我有一个用户提供的逗号分隔列表。我需要查询数据库,如果项目不在数据库中,我需要添加它。
用户提供的列表
green
blue
purple
white
数据库项目
black
white
red
blue
pink
orange
lime
预计数据库列表不会增长到超过30个项目,但最终用户总是会发现“创意”。如何使用我们提供的工具。
因此,使用上面提供的用户提供的列表,只应将green
和purple
添加到数据库中。
我是否将用户提供的列表与数据库项进行比较,反之亦然?如果用户提供的列表计数超过数据库中的数量,则进程是否会更改(这意味着用户是否提交了10个项目,而数据库只包含5个项目)?我不确定哪个循环是确定哪些项目是新项目的更好方法。需要在cfscript中,我正在查看此处概述的循环选项(https://www.petefreitag.com/cheatsheets/coldfusion/cfscript/)
FOR循环
FOR IN Loop(阵列)
FOR IN循环(查询)
我尝试了NOT IN的MySQL,但除了新的数据库值之外,还给我留下了现有的数据库值。我知道这应该很简单,我在某个地方使这个问题变得复杂和/或过于接近问题而无法看到解决方案。
答案 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)