Javascript 根据预定义数组对数组(resultset)进行排序
我从给定主键列表的SQL数据库获取数据;返回的数据的顺序并不总是相同的,我需要对它们重新排序以保留原始数组索引 例如: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
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);