phpMyAdmin中联表查询:如何按blog_id降序获取n-1条记录?
解决SQL查询报错及实现需求的方法
原语句问题分析
- LIMIT语法错误:MySQL的
LIMIT子句不支持直接使用n-1这类未定义的表达式,这是报错"Unexpected token. (near n)"的直接原因。 - 排序不符合需求:原语句用
ORDER BY blogs.blog_category, blogs.blog_posting_date DESC排序,但需求是按blogs.blog_id字段降序排列,此处需要修正。
正确实现方案
方案一:通过变量动态计算LIMIT值
先获取符合条件的总记录数,再计算出需要返回的条数(总条数-1),最后执行查询:
-- 定义变量存储总记录数 SET @total = (SELECT COUNT(*) FROM blogs WHERE blog_category='1'); -- 计算需要返回的条数 SET @limit_num = @total - 1; -- 执行关联查询 SELECT b.*, bc.* FROM blogs b INNER JOIN blog_categories bc ON b.blog_category = bc.category_id WHERE b.blog_category='1' ORDER BY b.blog_id DESC LIMIT @limit_num;
方案二:直接排除最后一条记录(更高效)
因为按blog_id降序排列时,最后一条记录就是blog_id最大的那条,直接通过子查询筛选掉这条记录即可:
SELECT b.*, bc.* FROM blogs b INNER JOIN blog_categories bc ON b.blog_category = bc.category_id WHERE b.blog_category='1' AND b.blog_id < (SELECT MAX(blog_id) FROM blogs WHERE blog_category='1') ORDER BY b.blog_id DESC;
内容的提问来源于stack exchange,提问作者Ranish Kumar
相关产品推荐
相关产品推荐

