【发布时间】:2016-10-05 08:47:49
【问题描述】:
我有 2 张桌子。
第一个包含条目/提交:
+----+-------+------+
| id | name | user |
+----+-------+------+
| 1 | test | 25 |
| 2 | foo | 3 |
| 3 | bar | 12 |
| 4 | hello | 2 |
| 5 | world | 6 |
+----+-------+------+
第二个包含分数。每个分数的值介于 1 和 5 之间。并非每个条目都有分数。 (假设 'DATETIME' 作为标准日期时间值)
+----+-------+-------+------+---------------------+
| id | score | entry | user | scored_date |
+----+-------+-------+------+---------------------+
| 1 | 4 | 1 | 5 | 2016-06-05 10:10:00 |
| 2 | 3 | 1 | 12 | 2016-06-05 10:20:00 |
| 3 | 5 | 3 | 6 | 2016-06-05 10:30:00 |
| 4 | 2 | 2 | 23 | 2016-06-05 10:40:00 |
| 5 | 3 | 2 | 46 | 2016-06-05 10:50:00 |
| 6 | 5 | 3 | 14 | 2016-06-05 10:60:00 |
| 7 | 6 | 3 | 32 | 2016-06-05 11:00:00 |
| 8 | 5 | 4 | 9 | 2016-06-05 11:10:00 |
| 9 | 1 | 2 | 4 | 2016-06-05 11:20:00 |
| 10 | 2 | 4 | 2 | 2016-06-05 11:30:00 |
| 11 | 4 | 2 | 18 | 2016-06-05 11:40:00 |
| 12 | 5 | 1 | 8 | 2016-06-05 11:50:00 |
| 13 | 3 | 2 | 32 | 2016-06-05 12:00:00 |
| 14 | 4 | 1 | 28 | 2016-06-05 12:10:00 |
+----+-------+-------+------+---------------------+
我正在尝试根据条目上升的“速度”对条目进行排序。一个很好的例子是像 threadless.com https://www.threadless.com/threadless/designs?status=open&sort=rising 这样的网站上的“Rising”列表
假设当前时间:12:30:00 按“上升”排序的条目的预期结果。可能基于最后一小时 (11:30:00 - 12:30:00),然后是最后 2 小时 (10:30:00 - 12:30:00) 等
Entry table results (Last 1 hour 11:30:00 - 12:30:00)
+----+-----------+
| id | score_sum |
+----+-----------+
| 1 | 9 |
| 2 | 7 |
| 4 | 2 |
| 3 | 0 |
| 5 | 0 |
+----+-----------+
Entry table results (Last 2 hour 10:30:00 - 12:30:00)
+----+-----------+
| id | score_sum |
+----+-----------+
| 3 | 16 |
| 2 | 13 |
| 1 | 9 |
| 4 | 7 |
| 5 | 0 |
+----+-----------+
我猜可能需要多个时间范围,因为在某些情况下,例如,过去 1 小时内没有得分,或者过去 3 小时内只有 2 个得分,但过去 5 小时。因此,仅过去 1 小时的结果将不准确或意义不大。
在这个前提下,我想不出这样一条 SQL 语句背后的逻辑。我也不确定如何结合不同的时间框架以使结果一致且有意义。
非常感谢任何建议!
【问题讨论】:
标签: php mysql sorting datetime