2017-01-15 7 views
0

テーブル内に次の行があります。mysqlの一連のレコード内の行の位置を取得

select * from Match2 where MatchIDAuto=4772 

それはシリーズの第三試合であることを知っているです:私は、次の手順を実行したときに私が行うことができるように必要なもの

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 

です。どのように動的にクエリでそれを計算することができますか?

答えて

0

ORDER BY句がないと、4772の行がセリエーの3番目の行であることを保証できません。これは、order by節のないデータベースは、実行計画に従って異なる注文を生成する可能性があるからです。

最初に行うべきことは、order by句をクエリに追加することです。データによって、私があなたの選択によって残すMatchIDAutoまたはMatchDateになる可能性があります。

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

私に多くの意味を成して、以来、これは私がMatchDateフィールドを選択し、このクエリに順3.ですべての列に加えroworderを返します。行の順序番号はなりあなたを得るためにMySQLでクエリあなたのデータの上にあなたの注文の列になる。

この手法では変数が作成され、すべての行まで合計されます。あなたはサブクエリでそれを包み込み、それを照会するだけです。

+0

ありがとう、ジョルジ、完璧なトリックを行うために見えます:) – Philip

関連する問題