このテーブルがあるとしましょう。次のようになっているとしましょう。
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番目のものは最後ではなく最初の年からそれらを吐き出します。