我有4个数据库。所有包含相同成员的成员都有不同的目标射击比赛分数。我想确定总体前10名的最高分。然后我将第一个数据库中的分数添加到数组中,然后将第二个数据库中成员的分数添加到数组中(添加分数)。等等到最后。那么如何获得10个最高分?我看过排序数组。我认为我的解决方案就在那里。
答案 0 :(得分:5)
您的数据库引擎可以以最佳方式执行此操作 - 只需执行以下查询:
SELECT name, score FROM membertable ORDER BY score DESC LIMIT 10
如果您已经获得了数组中的所有数据,请应用Quickselect算法以获得10个最佳值(无需完全排序)
答案 1 :(得分:0)
按比例对数组进行排序,然后返回前10个成员。如果可以,请在从数据库中选择时进行排序。
或者你可以在进行数组时保持10个最佳分数的数组,并将当前值与10个最佳分数进行比较..
答案 2 :(得分:0)
OK here is the code I used:
For I := 0 to iCount -2 do //iCount is length of DB
for J := I+1 to iCount -1 do
if arrScore[I] < arrScore[J] then
begin
T := arrScore[I];
K := arrMember[I];
arrScore[I] := arrScore[J];// arrScore holds member's score
arrMember[I] := arrMember[J];// arrMember holds member's name
arrScore[J] := T;
arrMember[J] := K;
end;
And it works, thanks to all your answers.