首页 > 解决方案 > Node-sqlite3 排序

问题描述

我正在编写一个网站以在 sqlite 数据库中搜索。我在后端使用 node-sqlite3,这是我的代码。

let query = `SELECT * FROM "main"."SPTOT" WHERE lower("Country") LIKE 'australia' ESCAPE '\\' ORDER BY Country, Operator, "Basic Type", Serial, Date`;
  db.all(query, (err, rows) => {    
    if (err) throw err;
    res.json({
      rows: rows,
      query: query
    });
  });

结果按日期排序,但应按国家、运算符、基本类型、序列号和日期排序。

当我将DB Browser for SQLite与完全相同的查询一起使用时,结果将按应有的方式排序。

从节点-sqlite3 图片

从数据库浏览器 图片

我不知道这是否是 node-sqlite3 或其他问题的问题。如果这是 node-sqlite3 中的问题,是否有另一种方法可以在 javascript 中对结果进行排序?

标签: node.jssqlite

解决方案


因此,我创建了一个排序函数,在运行查询并获得结果后立即对其进行排序。我将此问题报告给了 github 存储库。这就是排序功能。

function sort(array, keysInObj) {
  let elements = keysInObj.reverse();
  for (let e of elements) {
    array.sort((a, b) => `${a[e]}`.localeCompare(b[e]));
  }
  return array;
}

现在这是我的代码。

let query = `SELECT * FROM "main"."SPTOT" WHERE lower("Country") LIKE 'australia' ESCAPE '\\' ORDER BY Country, Operator, "Basic Type", Serial, Date`;
db.all(query, (err, rows) => {    
  if (err) throw err;
  rows = sort(rows, ["Country", "Operator", "Basic Type", "Serial", "Date"]);
  res.json({
    rows: rows,
    query: query
  });
});

推荐阅读