1

我研究了动态 SQL 和 inc() 函数,但两者都不是我真正想要的。

假设我有一个这样的数据库:

grade     name      age
9         Bob       9
10        Sue       11
11        Larry     15
9         Joe       8
10        Carrot    10

我想创建一个表,首先选择所有最低等级 (9) 的行,然后显示最旧的行。然后它会遍历并搜索下一个最高等级 (10) 并显示最旧的等级。然后转到下一个最高等级 (11) 并显示最旧的。

我希望他们都在同一张表中,而不必为每个年级写出单独的 SQL 调用和不同的 PHP 变量。

这是我现在的 SQL 调用:

$query = "SELECT * FROM horses WHERE grade='1' ORDER BY points DESC LIMIT 1" or die(mysql_error());

有没有办法让等级列递增,直到它达到数据库中的最高数字?

感谢您的任何建议。

4

1 回答 1

2

如果我理解您的要求,您不需要循环。相反,您需要一个MAX()grade. 以下方法应独立于您的 RDBMS 工作。它依赖于一个JOIN针对子查询的子查询,该子查询返回最大的agepergroup以获取该age/group对并将其连接回主表以检索name(和其他需要的列)。

SELECT
  horses.grade, 
  horses.name, 
  horses.age
FROM
  horses
  JOIN (
    SELECT grade, MAX(age) as maxage
    FROM horses 
    GROUP BY grade
  ) ma ON horses.grade = ma.grade AND horses.age = ma.maxage
ORDER BY grade ASC

这是SQLFiddle.com 上的一个示例

回报:

GRADE NAME  AGE
9     Bob    9
10    Sue    11
11    Larry  15

在一个循环中执行一个查询而不是多个查询通常更快且资源密集度更低,因此应尽可能采用这种方法

于 2012-12-06T00:35:29.237 回答