再会,
我有一个我一直试图解决的独特问题。
基本上,我根据客户端的请求从服务器获取大量数据。
我从不知道列是什么或表是什么,所以我设法创建了一个动态函数来处理数据,如下所示。
let _Insert_replace_string = (table, columns) => {
var string = 'INSERT INTO ' + table + ' (`TIMESTAMP`, `ERROR`, `LOCALID`'
for (let xx = 4; xx < columns.length; xx++) {
let element2 = columns[xx];
string += ', `' + element2 + '`'
}
string += ') VALUES ($TIMESTAMP, $ERROR, $LOCALID'
for (let xx = 4; xx < columns.length; xx++) {
let element2 = columns[xx];
string += ', $' + element2
}
string += ')'
string += ' ON CONFLICT(LOCALID) DO UPDATE'
string += ' SET `TIMESTAMP`=$TIMESTAMP, `ERROR`=$ERROR'
for (let xx = 4; xx < columns.length; xx++) {
let element2 = columns[xx];
string += ', `' + element2 + '`=$' + element2
}
string += ' WHERE LOCALID=$LOCALID'
console.log(string)
return string;
}
这对我的需求非常有效(因为我可以在几秒钟内插入 50 000+ 行)但是在来自服务器的第二个请求中,可以说我有如下表(客户端)''表示字符串''不包含任何内容(不空等)
+---------+------+------+------+------+
| LOCALID | col2 | col3 | col4 | col5 |
+---------+------+------+------+------+
| xx3 | '' | 123 | '' | 123 |
+---------+------+------+------+------+
| av1 | b | 456 | '' | 456 |
+---------+------+------+------+------+
| po2 | c | '' | c | 789 |
+---------+------+------+------+------+
所以如果服务器向下发送行
[xx3, abc, '', abc, '']
发生的事情是表格现在更新为
+---------+------+------+------+------+
| LOCALID | col2 | col3 | col4 | col5 |
+---------+------+------+------+------+
| xx3 | abc | '' | abc | '' |
+---------+------+------+------+------+
| av1 | b | 456 | '' | 456 |
+---------+------+------+------+------+
| po2 | c | '' | c | 789 |
+---------+------+------+------+------+
我想要发生的是检查服务器上''的值,并确保它不会用它们更新客户端,所以结果是
+---------+------+------+------+------+
| LOCALID | col2 | col3 | col4 | col5 |
+---------+------+------+------+------+
| xx3 | abc | 123 | abc | 123 |
+---------+------+------+------+------+
| av1 | b | 456 | '' | 456 |
+---------+------+------+------+------+
| po2 | c | '' | c | 789 |
+---------+------+------+------+------+
我试图改变声明
for (let xx = 4; xx < columns.length; xx++) {
let element2 = columns[xx];
string += ', `' + element2 + '`=$' + element2
}
至
for (let xx = 4; xx < columns.length; xx++) {
let element2 = columns[xx];
string += ',(CASE WHEN $' + element2 + '!="" THEN `' + element2 + '`=$' + element2 + ' END)';
}
但它似乎不起作用,我已经通过 stackoverflow 搜索和搜索,但我的问题没有什么是独特的,大多数事情都处理 SELECT 或表中已经存在的数据。我总是想要来自服务器的最新信息,我对必须覆盖的客户端信息不感兴趣。