获取mysql中一系列记录中的行位置

时间:2017-01-15 05:54:10

标签: mysql

我在表格中有以下行。

MatchIDAuto CompetitionIDAuto   TeamHome    TeamAway      MatchDate
4770          65                New Zealand South Africa 2017-02-19
4771          65                New Zealand South Africa 2017-02-21
4772          65                New Zealand South Africa 2017-02-25
4773          65                New Zealand South Africa 2017-03-01
4774          65                New Zealand South Africa 2017-03-04

我需要做的是当我执行以下操作时:

select * from Match2 where MatchIDAuto=4772

知道这是该系列赛的第3场比赛。我怎么能用查询动态计算呢?

1 个答案:

答案 0 :(得分:0)

如果没有ORDER BY子句,则无法保证标识为4772的行是系列中的第三行。这是因为没有order by子句的数据库可能会相应地执行不同的命令执行计划。

所以要做的第一件事就是在查询中添加order by子句。根据数据,我可以选择MatchIDAutoMatchDate。 MySql中的查询将为您提供行的订单号:

select * 
  from (
    select m.*, 
           @ord:=@ord+1 roworder 
      from Match2 m, 
           (select @ord:=0) t 
     ORDER BY MatchDate
    ) sub
  where MatchIDAuto=4772;

这将返回每个列加roworder的订单3.在此查询中,我选择MatchDate字段,因为对我而言,您的数据更适合作为订单的列。

此技术将创建一个变量并将其汇总到每一行。您只需将其包装在子查询中并进行查询即可。