如何从MySQL/MariaDB数据库中查询指定条件的最后3行数据
错误原因
SELECT TOP N 是SQL Server、Access等数据库的专有语法,MariaDB/MySQL不支持该语法,限制返回行数需要使用LIMIT关键字。
正确写法
你要获取符合条件结果的最后3行,核心逻辑是先按排序字段倒序排列,取前3条,再按需转回正序。
通常PoemID是自增主键,默认查询的正序就是按PoemID升序排列,所以最后3行就是PoemID最大的3条:
写法1:结果按PoemID倒序展示(直接取最新3条)
SELECT * FROM poem WHERE MemberID = 54 ORDER BY PoemID DESC LIMIT 3;
以你给出的MemberID=79的示例数据为例,执行上述语句返回结果如下:
+--------+------------------------+--------------------+ | PoemID | Title | Description | +--------+------------------------+--------------------+ | 54 | Imaginary | Imagine me | | 53 | Love under the sky | How is your heart? | | 52 | Kapono | Poetic | +--------+------------------------+--------------------+
写法2:结果保持原查询的PoemID升序排列
如果需要结果顺序和原查询的最后3行顺序一致,可以在外层再加一层正序排序:
SELECT * FROM ( SELECT * FROM poem WHERE MemberID = 79 ORDER BY PoemID DESC LIMIT 3 ) AS tmp ORDER BY PoemID ASC;
执行后返回结果如下:
+--------+------------------------+--------------------+ | PoemID | Title | Description | +--------+------------------------+--------------------+ | 52 | Kapono | Poetic | | 53 | Love under the sky | How is your heart? | | 54 | Imaginary | Imagine me | +--------+------------------------+--------------------+
如果你的表有其他排序规则(比如按创建时间排序),只需要把ORDER BY后的字段替换为对应的排序字段即可。
内容的提问来源于stack exchange,提问作者Biax20
相关产品推荐
相关产品推荐

