2011-01-17 11 views
0

私はマイルを歩くテーブルを持っている「ウォーキングチャレンジ」のためにウェブサイトを作っています。値に達するまでのmysql SUM

ターゲットは2105マイル(ニューカッスル、英国からイスタンブール)です。

トップページには、現在最もマイルを積んだ5つのチームを表示しているリーダーボードがあります。

私はこのachiveするには、次の問合せを使用しています:私はこのリーダーボードはかなり遠いが歩いている人よりも第1終了5つのチームを表示したいしかし

SELECT 
    SUM(log.distance) AS l, 
    log.*, 
    team.* 
FROM 
    team 
RIGHT JOIN 
    log ON team.teamname = log.teamname        
GROUP BY 
    log.teamname 
ORDER BY 
    l DESC 

を。最初に2105マイルに到達したチーム。

現在のウェブサイトでは、テーブルにNULL可能completedDateフィールドを追加し、誰かがレースを完了するたびに、それを移入here

+1

ログテーブルとチームテーブルのDDLを投稿してください。あなたの質問は、あなたが保存したタイムスタンプを知らずに答えることは不可能です*(そして、あなたが盲目的に表示されたリンクをクリックしないと私を許す必要があります)* –

+1

あなたはどのように時間を追跡していますか? –

+0

私は現在、ログテーブルに単純なタイムスタンプ(CURRENT_TIMESTAMP)を使って時刻を記録しています。 –

答えて

3

を表示することができます。完了日までに注文する。

そうでなければ最初に終了した人によって注文する方法はありません。

+1

ログテーブルにタイムスタンプがある場合は方法があると思います。サイトは既にライブで稼動しているようだが、データベースはかなり人口が多いようだ。だから私は新しいフィールドを追加するには遅すぎると思う。 –

+0

ああ、大丈夫。私はリンクをクリックせず、一部の人々が既にチャレンジを完了していることに気付きました。タイムスタンプが存在する場合、それは可能です。しかし、私はまだ列を作成し、ログのタイムスタンプから現在それを設定するためのスクリプトを書いています。次に、将来のすべての補完のために新しいフィールドを設定して使用します。 –

+0

クール、私はそれをします、チャレンジは一度に16週間実行されるので、これは次回にはうまくいくはずです。歓声 –

0

あなたは毎回、現在の時刻を取得し、タイムスタンプフィールドチームはそれが歩いたマイル数を入力し、あなたがこのようdomethingない可能性があるので:

SELECT 
     SUM(log.distance) AS l, 
     MAX(log.timestamp) AS t, 
     log.*, 
     team.* 
    FROM 
     team 
    RIGHT JOIN 
     log ON team.teamname = log.teamname       
    GROUP BY 
     log.teamname 
    WHERE 
     l >= 2105 
    ORDER BY 
     t ASC 

これは場合にのみ動作することに注意してください目標距離を完了した後にチームが余分なマイルを追加することは許可されません。 ターゲットを完了した後に追加マイルを追加できれば、私に知らせてください。別のクエリを探してみます

+0

こんにちは、確かにチームは、合計に達した後、まだマイルを追加することができます:( –

+0

ロケットロニー:その場合、私はチャックの解決策が最も簡単だと思います。条件が満たされているが、私は本当にSQLの専門家ではないので、私はチャックのソリューションにこだわるだろうもし私はあなた:) –