mysql 查询商品分类下的n条数据库_MySQL怎么查询排序后结果集的前[N, M]条记录

3 楼

zzxwill

2009-06-03

看了很受益~

下面是一些方法:

显示查询结果集的[M,N]结果

1.T(c),显示按c排序之后的21-30条记录

a)方法一:子查询

mysql> select * from test

-> ;

+-------+

| bonus |

+-------+

|     2 |

|  3000 |

|     0 |

|    80 |

|    50 |

|   150 |

+-------+

下面是加上“属性”rownum

mysql> select bonus, (select count(*) from test where t.bonus>=bonus ) as rownum

from(select * from test order by bonus) t;

+-------+--------+

| bonus | rownum |

+-------+--------+

|     0 |      1 |

|     2 |      2 |

|    50 |      3 |

|    80 |      4 |

|   150 |      5 |

|  3000 |      6 |

+-------+--------+

6 rows in set (0.00 sec)

选出2到6条记录

mysql> select bonus from(select t.bonus, (select count(*) from test where t.bonu

s>=bonus ) as rownum  from(select * from test order by bonus) t) t2 where t2.row

num>=2 and t2.rownum<=5;

+-------+

| bonus |

+-------+

|     2 |

|    50 |

|    80 |

|   150 |

+-------+

4 rows in set (0.00 sec)

b)方法二:ifnull函数

设置@x 初值:如

mysql> set @x=0;

Query OK, 0 rows affected (0.00 sec)

查询:

mysql>  select @x:=ifnull(@x,0)+1 as rownum , bonus from test order by bonus;

+--------+-------+

| rownum | bonus |

+--------+-------+

|      7 |     0 |

|      8 |     2 |

|      9 |    50 |

|     10 |    80 |

|     11 |   150 |

|     12 |  3000 |

+--------+-------+

6 rows in set (0.00 sec)

方法三:使用联接查询(笛卡尔积)

mysql> select a.bonus, count(*) as rownum  from test a,test b where a.bonus>=b.b

onus group by a.bonus;

+-------+--------+

| bonus | rownum |

+-------+--------+

|     0 |      1 |

|     2 |      2 |

|    50 |      3 |

|    80 |      4 |

|   150 |      5 |

|  3000 |      6 |

+-------+--------+

6 rows in set (0.00 sec)

2.T(c),显示21-30条记录

方法一:ifnull函数

mysql>  select @x:=ifnull(@x,0)+1 as rownum , bonus from test;

+--------+-------+

| rownum | bonus |

+--------+-------+

|      1 |     2 |

|      2 |  3000 |

|      3 |     0 |

|      4 |    80 |

|      5 |    50 |

|      6 |   150 |

+--------+-------+

6 rows in set (0.00 sec)

方法二:上面方法三

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值