2

詳細

受けた各テストの開始時間と停止時間 (期間) の差を見つけ、各テストの最高スコアと最低期間に従ってユーザーをランク付けしたいと考えています。最終的には、MySQL でこれを行うために PDO を使用します。これまでのところ、私はSQLに取り組んでいます。今はかなり近いと思いますが、確信が持てませんhow to combine the information into one query

私が持っているもの(未テスト)。

私は次のテーブルを持っていますtestresults

--------------------------------------------------------------------
| index | id |         start         |          stop        | score| 
--------------------------------------------------------------------
|   1   | 23 |   2012-06-06 07:30:20 | 2012-06-06 07:30:34  | 100  |
--------------------------------------------------------------------

私の選択ステートメントでは、計算されたidとを取得したいと考えています。scoreduration

以下のクエリを使用して、今日受けたテストの期間を取得できます。

SELECT TIMESTAMPDIFF(SECOND,stop,start) AS duration
FROM testresults WHERE `start` >= DATE(NOW())

次に、ランクに基づいて結果を並べ替えます。スコアと持続時間に応じてランクが決定されます。一番上の場所は、最短の持続時間で最高のスコアになります.私は次のようなものでそれを行うことができると信じています:

ORDER BY score DESC, duration ASC

たぶん100エントリしか欲しいので、

LIMIT 100

質問

上記の情報を 1 つのクエリにまとめるにはどうすればよいですか?

4

2 に答える 2

1
SELECT `id`, `score`,
    TIMESTAMPDIFF( SECOND, start, stop ) AS `duration`
FROM `testresults`
WHERE `start` >= DATE(NOW())
ORDER BY `score` DESC, `duration` ASC
LIMIT 100;

これはかなりうまくいきます。また、ステートメントにid&を入れる必要があります。scoreSELECT

于 2012-08-24T14:46:38.257 に答える
1
SELECT id, score, TIMESTAMPDIFF(SECOND,stop,start) AS duration FROM testresults
WHERE `start` >= DATE(NOW()) ORDER BY score DESC, duration ASC LIMIT 100

これはうまくいくはずです

于 2012-08-24T14:47:55.603 に答える