2016-09-21 13 views
1

私はテーブル "student_points"を持っています。結果を並べ替えるmysqlまたはphp配列関数を使用

id user_id  points subject_id  
1  10   45   22 
2  11   75   23 
3  12   78   24 
4  10   13   23 
5  12   65   23 

のように...

このテーブルには、ユーザーとの点の約1000レコードが含まれています。 私がポイントに基づく10件のレコードをしたい(マックスは最初のポイント) だから私は

Select * from student_points order by points limit 0,10 

としてMySQLのクエリを使用することができます今の要件は、私たちはグループに最初の10枚のレコードに例えばuser_idを に基づいてこれらの10件のレコードが必要だということです3つは3つの生徒の記録なので、グループで表示する必要があります。 最終的な結果は、あなたが最初のレコードが最もポイントに基づいており、それが学生のIDは今、彼らはuser_idのに応じてグループである、12であることを見ることができます

id user_id  points subject_id 
    3  12   78   24 
    5  12   65   23 
    1  10   45   22 
    4  10   13   23 
    2  11   75   23 

ようにする必要があります。

私は2度お試しました。 結果を取得した後もarray_multisortを試しましたが、両方が正しく動作していません。

結果を取得した後、mysqlクエリまたはグループのいずれかをお勧めします。私はあなたがサブクエリでクエリをラップし、後でuser_idpointsに基づいて結果をソートする必要があると思います

おかげ

+0

ポイントの降順でソートされた 'user_id'ごとに10レコードが必要ですか? – 1000111

+3

ORDER BY user_id DESC、ポイントDESC? – jitendrapurohit

+0

あなたも同様にポイントを集計したいですか? –

答えて

0

SELECT * FROM (
    Select * from student_points order by points limit 0,10 
) As st 
GROUP BY user_id,subject_id 
ORDER BY points DESC 

これを試してください:

SELECT * FROM 
(
    Select * from student_points order by points limit 0,10 
) AS t 
ORDER BY 
    t.user_id DESC, 
    t.points DESC 
+1

私は理由を聞いてみたいと思っています** downvoting ** – 1000111

+0

@ 1000111、もう一度質問を読んで、私は編集しました。 – Rich5757

+0

あなたの要件はこのクエリによっても達成できます。これを試してみてください@ Rich5757 – 1000111

1

これは私が書いたあなたの必要な結果を得るには

select sp.id, sp.user_id, sp.points 
from student_points sp 
join (select user_id, max(points) as sort_by from student_points group by user_id) sort_table on sp.user_id = sort_table.user_id 
order by sort_table.sort_by desc, sp.user_id, sp.points desc; 
1

でクエリを制限するために、好きな数に制限を追加するだけで動作するはずです。これがあなたにとってうまくいかないかどうか私に教えてください。

関連する問題