列出按数据库中某个列排序的表:node.js

时间:2018-02-05 10:57:30

标签: javascript node.js

好吧,所以我已经坚持了一段时间而且我没有接近。

  run(msg, { text }) {
    let sql = 'SELECT username, melo, lelo, celo FROM users';
    var count = 0;
    db.query(sql, (err, rows) => {
      var users = [];
      if (text == 'mock') {
        for (var i = 0; i < rows.length; ++i) {
          count++;
          users.push([count + ') '], [rows[i].username + ': '], [rows[i].melo]);
        }
        var arr = users.sort((a, b) => {
          return b[2] - a[2];
        });
        console.log(users);
        // console.log(arr);
        msg.channel.send(arr);
      }
    });
  }

我可以把它列出来。但是我可以把它弄清楚,好吧......任何东西。我已经通过几种不同的方式完成了这项工作,但无济于事。这是我尝试的最后一种方法,它只列出所有内容,就像普通数组一样。不过我希望列出:

1) name highernumber
2) name lowernumber
3) name evenlowernumber

如果有帮助,可以想象一下RPG排行榜。

1 个答案:

答案 0 :(得分:1)

  

首先,应该在数组之后分配索引   排序,除非这是要求。

我相信您正在尝试创建一个数组数组并对顶级数组进行排序,因此return b[2] - a[2]

这不起作用,因为

users.push([count + ') '], [rows[i].username + ': '], [rows[i].melo])

不会创建嵌套数组,只是将多个元素添加到同一个数组中。你需要的是

users.push([count + ') ', rows[i].username + ': ', rows[i].melo])

  

但即使在此,计数也不会按顺序排列,因为它有   在排序之前已经分配。以下代码将为您提供   要求的结果。

run(msg, { text }) {
  let sql = 'SELECT username, melo, lelo, celo FROM users';
  var count = 0;
  db.query(sql, (err, rows) => {
    var users = [];
    if (text == 'mock') {
      for (var i = 0; i < rows.length; ++i) {
        users.push([rows[i].username + ': ', Number(rows[i].melo)]);
      }
      var arr = users.sort((a, b) => {
        return b[1] - a[1];
      });

      for (var i = 0; i < arr.length; ++i) {
        count += 1
        arr[i].unshift(count + ') ')
        arr[i] = arr[i].join()
      }
      console.log(users);
      // console.log(arr);
      msg.channel.send(arr);
    }
  });
}