4

このテーブルがあるとしましょう。次のようになっているとしましょう。

table values (

 - id (int, primary key, auto increment) 
 - object_id (foreign key on a
   different table. Used to search for specific object values) 
 - year
   (varchar, because in someone's infinite wisdom using "1981-1982" in
   addition to 1981 and 1982 values is a good idea) 
 - high_price 
 - low_price

)

さて、データが更新された価格で最後に単に追加された場合、これは簡単なことです。ただし、データの見栄えは良くありません。たとえば、3年間の範囲を見てみましょう。

(id, object_id, year, high_price, low_price)

 - 259, 60, 1976, 34000, 29000
 - 260, 60, 1977, 35000, 31000
 - 261, 60, 1978, 36000, 35000
 - 1103, 60, 1976, 29000, 25000
 - 1104, 60, 1977, 36000, 32000
 - 1105, 60, 1978, 38000, 33000
 - 2634, 60, 1976, 34000, 30000
 - 2635, 60, 1977, 37000, 33000
 - 2636, 60, 1978, 40000, 35000

特定の年の最新の18エントリを取得したい場合、これをどのように実行しますか?また、逆の順序にする必要があるため、グラフを作成すると、直近の年が右側に表示されます。私は必ずしも直近の年を知る必要はなく、それは今年ではないかもしれません(おそらく今年ではないでしょう)。

PHPに次のようなSQLステートメントがあります。

$sql = "SELECT * FROM `values` WHERE `object_id`='$id' 
    ORDER BY  `year` DESC, `id` DESC LIMIT 18"
$result = $mysqli->query($sql);

これは正しい値を取得しているように見えますが、それらを間違った順序にしています。逆ループでリストを簡単に調べることができますが、これを実行できるSQLステートメントがあるかどうかを知りたいです。

ありがとう!

ORDER BY year ASC, id DESC編集:私はとでSQLを試しましたORDER BY year DESC, id ASC。これらはどちらも機能しません。最初のものはまだそれらを後方に吐き出しますが、2番目のものは最後ではなく最初の年からそれらを吐き出します。

4

1 に答える 1

3

外側の選択を追加し、年の順序を反転します。

SELECT * FROM (
  SELECT year, col2, col3 ... FROM `values` WHERE `object_id`='$id' 
      ORDER BY  `year` DESC, `id` DESC LIMIT 18
  ) a
ORDER BY YEAR ASC
于 2012-06-12T17:02:49.730 に答える