Javascript 根据预定义数组对数组(resultset)进行排序

Javascript 根据预定义数组对数组(resultset)进行排序,javascript,postgresql,sorting,resultset,Javascript,Postgresql,Sorting,Resultset,我从给定主键列表的SQL数据库获取数据;返回的数据的顺序并不总是相同的,我需要对它们重新排序以保留原始数组索引 例如: var ids = [2, 12, 5, 3, 10]; var query = 'SELECT * FROM tbl_foo WHERE id IN (' + ids.join(',') + ')'; db.query(query, null, function (result) { console.log(result.rows); // [ { id: 2

我从给定主键列表的SQL数据库获取数据;返回的数据的顺序并不总是相同的,我需要对它们重新排序以保留原始数组索引

例如:

var ids = [2, 12, 5, 3, 10];
var query = 'SELECT * FROM tbl_foo WHERE id IN (' + ids.join(',') + ')';

db.query(query, null, function (result) {

   console.log(result.rows);
   // [ { id: 2, ... },
   //   { id: 3, ... },
   //   { id: 5, ... },
   //   { id: 10, ... },
   //   { id: 12, ... } ]

});
注意:不必担心SQL注入警告,这是一个示例;接吻

我将如何保持这种顺序,或者我将如何有效地在给定的原始结果集中对结果集进行排序


谢谢

unnest
ids
数组与索引一起放入一个集合中。然后
内部联接
,使用生成的索引将其设置为目标表。在本例中,
t
是由
generate\u series
生成的目标表

以上是一个独立的示例。在您的代码中,您将使用现有表代替
t
。在javascript中,使用
String.replace()
传递
ids
数组,这样就不必乱造字符串

var ids = [2, 12, 5, 3, 10];
var query = '\
    with a as ( \
        select \
            unnest(array[%ids]) as id, \
            generate_series(1, array_length(array[%ids], 1)) as i \
    ) \
    select t.* \
    from \
        t \
        inner join \
        a using (id) \
    order by a.i \
'.replace(%ids, ids);

@Yanick更新了简化的真实javascript代码
var ids = [2, 12, 5, 3, 10];
var query = '\
    with a as ( \
        select \
            unnest(array[%ids]) as id, \
            generate_series(1, array_length(array[%ids], 1)) as i \
    ) \
    select t.* \
    from \
        t \
        inner join \
        a using (id) \
    order by a.i \
'.replace(%ids, ids);