2

细节

我想找出每个测试的开始和停止时间(持续时间)之间的差异,然后根据每个测试的最高分和最低持续时间对用户进行排名。最终我将使用 PDO 在 mysql 中执行此操作。到目前为止,虽然我一直在研究 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  |
--------------------------------------------------------------------

在我的选择语句中,我想得到idandscore以及计算的duration.

我可以通过以下查询获得今天进行的任何测试的持续时间。

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 回答