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

)

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

(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 DESCand尝试了 SQL ORDER BY year DESC, id ASC。这些都不起作用。第一个仍然向后吐出它们,而第二个从第一年而不是最后一年吐出它们。

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 回答