【问题标题】:MySQL / PHP ordering rows based on fieldMySQL / PHP基于字段的排序行
【发布时间】:2016-01-06 16:07:45
【问题描述】:

我需要根据race_time 中的时间设置race_order 列的值。这需要以class_id 为基础。

我尝试了几个不同的查询来获得我正在寻找的结果,但我在这个查询上遇到了墙。

Column  Type
time_tracking_id (Primary)  int(1)
event_id    int(1)
class_id    int(1)
race_type   varchar(1)
race_nbr    int(1)
race_time   varchar(10)
race_order  int(1)

查看这个 sqlfiddle: http://www.sqlfiddle.com/#!9/2e2e6/1/0

这是我正在寻找的结果:

time_tracking_id event_id class_id race_type race_nbr race_time race_order 5 113 14(空) 21 121.0000 1 6 113 14(空) 22 124.0000 2 1 113 17(空) 25 120.0000 1 2 113 17(空) 26 180.0000 2

【问题讨论】:

  • 你的 sqlfiddle 不起作用.. 但你是什么意思“我需要设置一个值”?一个选择?并更新?解释得更好
  • 不知道为什么小提琴不适合你,对我来说很好。是的,我需要根据 class_id 和 race_time 将字段 race_order 更新为“排名”

标签: php mysql sorting group-by


【解决方案1】:

它不是很快,但如果race_time 对于每个class_id 都是唯一的,它是有效的:

SELECT
  time_tracking_id, 
  event_id,
  class_id,
  race_type,
  race_nbr,
  race_time,
  1 + (SELECT COUNT(*) FROM tbl_time_tracking t2
   WHERE t2.class_id = tbl_time_tracking.class_id 
   AND t2.race_time < tbl_time_tracking.race_time) AS race_order
FROM
  tbl_time_tracking
ORDER BY class_id, 
         race_time 

【讨论】:

  • 是的,它们会......效果很好。这正是我所需要的。谢谢 执行时间并不重要,因为我通常一次只处理 4 到 8 行。
  • “它不是很快” - 嘿,至少你是诚实的 ;-) 干得好。
  • 我将它与应用程序的其余部分一起运行,这绝对不是问题。足够快。
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
相关资源
最近更新 更多