2011-02-07 3 views
1

こんにちはポイントシステムでウェブサイトを構築しています。PHPでユーザーのトップリストを作成するにはどうすればよいですか?

(ユーザーの広告がポスト彼は5ポイントを受け取ることになります場合のは、言ってみましょう)

私が使用している:

SELECT id, username, active, points 
    FROM users 
    WHERE active='1' 
    ORDER BY points DESC 

をトップユーザーを表示するようにしても、私はwhileループで(表示することができます)場所

どのようにすれば場所は、個人ページやその他のページに表示できますか?

2番目の質問として、私はどのようにしてユーザをの場所に誘導できますか? (彼が.... 1000位にいる場合)

答えて

0

プレイヤーのランクやポイント数に基づいてスタンディングを表示する場合は、rownumが必要です。私はMySQLにrownum機能がないと思っていますが、それを偽装する方法を示すリンクを見つけました:免責:私はこれを試していません。http://jimlife.wordpress.com/2008/09/09/displaying-row-number-rownum-in-mysql/

...もちろん、2人のプレイヤーのポイントが同じであれば、どうしたらよいですか?彼らに同じ階級を与える?それはもう少し複雑になる可能性がありますが、私がリンクしている解決策を適応させることができますか?私はランキングシステムを持っているほとんどのブラウザベースのゲームなど。を見てきた何

select count(*) from users where points > $my_points; 
1

その結果を「ランク」テーブルに入れて、そのテーブルを1日に1回しか更新しないこと以外は同様です。その後、人の場所を見つけるために、単に "ランク"テーブルを照会し、auto_inc'd番号の列から値を取得します。もちろんこれはすべての単一のクエリを実行できますが、それはあまり効率的ではなく、更新されたランクを1日に1回、または通常許容されるもので表示します。

+0

トッププレイヤーの合計が100ポイントの場合、99ポイントを持つプレイヤーは6位にランクされます。ランキングが1から6に変わると、人々は2、3、4、5位に何が起こったのか尋ねると奇妙に見えるかもしれません。 – FrustratedWithFormsDesigner

+0

2次ソート基準が定義されていないので避けられません。ランキングシステム。だから、単に「あなたのランクは6」から「あなたは6位に縛られています」という表現を変更することもできます。 –

+0

Mysqlにはデフォルトの第2の基準があります。 – silviu

1
SELECT id, username, active, points, @place = @place + 1 
    FROM users, (select @place := 0) p 
    WHERE active='1' 
    ORDER BY points DESC 
+0

ありがとうございました – silviu

+0

ありがとうございましたが、選択した '@place = @place + 1'を' @place:= @ place + 1'に変更した後、 – Aznim

0

基本的にクエリを実行されない:私より多くのポイントを持っているユーザーを数えるについてどのように

0

あなたの最初の質問に答えるには、次のクエリを使用します。これはユーザーポイントを返します。

SELECT points FROM users WHERE id='$userid' 

しかし、私はあなたの2番目の質問を理解できませんか?

関連する問題