Nehmen wir an, ich habe diese Tabelle. Sagen wir, sie sieht ungefähr so aus:
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
)
Dies wäre einfach zu bewerkstelligen, wenn die Daten einfach am Ende mit aktualisierten Preisen hinzugefügt würden. Die Daten sind jedoch nicht schön anzusehen. Betrachten wir zum Beispiel einen Dreijahreszeitraum:
(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
Wie würde ich vorgehen, wenn ich die 18 jüngsten Einträge für ein bestimmtes Jahr erfassen möchte? Es muss auch in umgekehrter Reihenfolge sein, so dass das jüngste Jahr in der Tabelle rechts steht. Ich kenne nicht unbedingt das jüngste Jahr, und es ist möglicherweise nicht das aktuelle Jahr (höchstwahrscheinlich wird es nicht das aktuelle Jahr sein).
Ich habe eine SQL-Anweisung in meinem PHP, die wie folgt aussieht:
$sql = "SELECT * FROM `values` WHERE `object_id`='$id'
ORDER BY `year` DESC, `id` DESC LIMIT 18"
$result = $mysqli->query($sql);
Dies scheint die richtigen Werte zu erhalten, aber sie werden in der falschen Reihenfolge angeordnet. Ich kann die Liste einfach in einer umgekehrten Schleife durchgehen, aber ich würde gerne wissen, ob es eine SQL-Anweisung gibt, die dies für mich erledigen kann.
Danke!
Bearbeiten: Ich habe das SQL mit ORDER BY year ASC, id DESC
y ORDER BY year DESC, id ASC
. Keines von beiden funktioniert. Der erste spuckt sie immer noch rückwärts aus, während der zweite sie ab dem ersten Jahr statt dem letzten ausspuckt.