如何连接数据库ID到一个数据库值在javascript?



我得到了一个每X分钟/小时执行一次的函数,当它执行时,它将选择一个随机的数据库数组值,当它这样做时,被选中的将得到+ 1。Selected表示该行被选中的次数。

id: 5 name: tom selected: 17
id: 8 name: tim selected: 12
id: 2 name: tombie selected: 5
id: 3 name: timbie selected: 4

这是我的代码,我从中捕获所有的数据库值

function setValue (value) {
  console.log("Array", value);
  result_arr = Object.values(JSON.parse(JSON.stringify(value)));
  return result_arr;
  
}
console.log("arr", result_arr);
db.connect(function(err) {
    db.query("SELECT * FROM developers", (err, result, fields) => {
        if (err) {
        console.log(err);
        } else {
        // selected = all.map(item => item.selected);
        console.log("result", result);
        setValue(result);
        console.log("value", setValue(result));
        removeMax()
        
        }
    })

假设我们已经选择了:5,4,12和17。17是最高选择计数,为了避免它获得更多的选择点,我确保从数组中删除最高数字。一旦最大的数字被删除,我洗牌的数字,它将选择一个随机的。

function removeMax() {
    const max = Math.max(result_arr.map(item => item.selected));
    const newArr = result_arr.map(item => item.selected).filter(number => number !== max);
    var shufflearray = newArr[Math.floor(Math.random()*newArr.length)];
    return shufflearray;
    
}

假设从洗牌中我得到5。现在我要给这个加1,所以5必须变成6

在函数hi()中,我有一个If语句,每天上午8点必须执行此代码。如我所说,我必须更新所选值。

问题来了通常我会做UPDATE developers SET selected = 6 WHERE id = 2。但因为我有多行,这不会工作。今天可能是蒂姆比,明天也可能是蒂姆。如何将所选值与其id链接起来?

function hi() {
    window.setInterval(function(){
        var date = new Date();
        if (date.getHours() === 8 && date.getMinutes() === 0) {
            if (test) {
                db.query( `UPDATE developers SET selected = ? WHERE id = ${item.id} `,[selected, id],
                (err, result) => {
                    if (err) {
                        console.log(err);
                    } else {
                        res.send(result);
                    }
                });
            }
  


        }
        else {
            const abort = "abort"
        }
    }, 60000);
}

在removeMax()函数中,数据被简化为仅为所选值的列表。你需要保存每一项,而不仅仅是它被选中的次数。

原始代码:

function removeMax() {
    const max = Math.max(result_arr.map(item => item.selected));
    const newArr = result_arr.map(item => item.selected).filter(number => number !== max);
    var shufflearray = newArr[Math.floor(Math.random()*newArr.length)];
    return shufflearray;
    
}

原始结果:

var result_arr = [{'id': 1, 'selected': 10}, {'id': 2, 'selected': 5}, {'id': 3, 'selected': 15}, {'id': 4, 'selected': 7}]
newArr = result_arr.map(item => item.selected)
resulting newArr: [10, 5, 15, 7]

之后,您将删除最大的值。注意到所有id都消失了吗?

如果你这样做:

newArr = result_arr.filter(item => item.selected !== max)
resulting newArr: [{id: 1, selected: 10}, {id: 2, selected: 5}, {id: 4, selected: 7}]

现在您有了一个对象数组,您可以像以前一样重新排列它们,然后使用item.selected访问selected的#。,每个id为item.id.

最新更新