错误数据的MySQL / PHP ORDER BY

假设我有这张桌子.让我们说它看起来像这样:

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

)

现在,如果数据最后只是以更新的价格添加,这将是一件容易的事情.但是,数据并不好看.例如,让我们看一下三年的范围:

(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年ASC,ID DESC和ORDER BY年DESC,id ASC.这些都不奏效.第一个仍然向后吐出它们,而第二个从第一年而不是最后一年吐出它们.

最佳答案
添加外部选择并按年份翻转顺序:

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

转载注明原文:错误数据的MySQL / PHP ORDER BY - 代码日志