-1

想象一下,例如,我有一组30 条记录

users : {user_id, name, category}

我做了这个查询:

     SELECT name
     FROM users
     WHERE category = "Student"
     AND id < 30
     ORDER BY user_id
     LIMIT 5

这将为我提供 id 从 1 到 5 的用户,但是如果我想获得小于 30 的最高 id 值,在这种情况下,所需的结果将是 24 -29 的 id。

附言。我真正的问题比这要复杂一些,我只是想了解基本理论。另请注意,我会使用另一个 AND 子句来表示 > 23,但这不适用于我的模式。

4

5 回答 5

1

您可以按降序对同一查询的结果进行排序:

SELECT name
FROM users
WHERE category = "Student"
AND id < 30
ORDER BY user_id DESC
LIMIT 5

这将返回最大的五个 ID。尽管可能值得详细说明您实际要完成的工作。按 ID 列排序有点可疑。:)

于 2012-11-16T18:01:54.233 回答
0

尝试这个:

SELECT name
FROM users
WHERE category = "Student"
AND id < 30
ORDER BY user_id 
LIMIT 25,5
于 2012-11-16T18:16:08.897 回答
0

您可以将 Dan J 写的内容包装成一个集合并从中选择,然后应用 ASC 顺序。不确定 MySQL 语法,但在 MS SQL 中它会是:

SELECT * FROM
   (Dan J's code) a
ORDER BY user_id [ASC]

ASC 是可选的。

于 2012-11-16T18:17:18.200 回答
0

您可以尝试子查询:

     SELECT name
     FROM users
     WHERE category = "Student" AND
         id >((SELECT MAX(id) FROM users)-5) AS temp
     ORDER BY user_id
     LIMIT 5

根据您的表结构,您可以移动category = "Student"到子查询。

于 2012-11-16T18:17:32.610 回答
0

你指的是这样的逻辑吗? * 在 SQLFiddle 上

SELECT * FROM 
    (SELECT quiz_name
    FROM cursos
    WHERE id < (select max(id) from cursos)
    ORDER BY ID DESC
    LIMIT 5) ) tbl 
ORDER BY id ASC

它从您的表中获取 MAX 行 ID 并获得最高的 5 个 ID 值。例如 MAX = 9,它为您提供8、7、6、5、4。 编辑:添加 ASC 外部选择顺序后,您将得到 4、5、6、7、8。

PS:忽略我的表模式,这是我刚刚用于此示例的旧表模式。

编辑版: - 对不起,我的网坏了。

您确实应该使用 Sebt 提到的嵌套 SELECT 包装。但是,您需要在嵌套选择中包含 ID,因此您可以从 tbl 外部选择查询中选择它。

于 2012-11-16T18:23:02.950 回答