排行榜的问题,如果设置榜单排名?现在有一个问题,我有一组数据可以得到一个排行名次。
譬如,有一个原始表table1account | value1 | value2
--------------------------
aaa 10 20
bbb 30 40
ccc 15 30
我对其insert .. select .. order by value1 desc;
插入到另一个表table2结果就是。table2就是一个排行榜结果表。account | value1
-----------------
bbb 30
ccc 15
aaa 10
*******************************************
*****************问题来了******************
*******************************************
1. 我如何知道ccc在这个排行中的名次?
2. 如果换种方法:
我直接将名次插入到数据库中,增加一列,怎么办?
即:account | value1 | Order
------------------------
bbb 30 1
ccc 15 2
aaa 10 3非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
譬如,有一个原始表table1account | value1 | value2
--------------------------
aaa 10 20
bbb 30 40
ccc 15 30
我对其insert .. select .. order by value1 desc;
插入到另一个表table2结果就是。table2就是一个排行榜结果表。account | value1
-----------------
bbb 30
ccc 15
aaa 10
*******************************************
*****************问题来了******************
*******************************************
1. 我如何知道ccc在这个排行中的名次?
2. 如果换种方法:
我直接将名次插入到数据库中,增加一列,怎么办?
即:account | value1 | Order
------------------------
bbb 30 1
ccc 15 2
aaa 10 3非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
非常感谢!!!!!!
set @num=1;
insert .. select *,@num:=@num+1 from tt order by value1 desc;orselect a.account,a.value1,count(b.*) from tt a left join tt b on a.value1<=b.value1
+---------+--------+------+
| account | value1 | rank |
+---------+--------+------+
| aaa | 10 | 1 |
| ccc | 15 | 2 |
| bbb | 30 | 3 |
+---------+--------+------+
3 rows in set (0.00 sec)
+---------+--------+------+
| account | value1 | rank |
+---------+--------+------+
| bbb | 30 | 1 |
| ccc | 15 | 2 |
| aaa | 10 | 3 |
+---------+--------+------+
3 rows in set (0.00 sec)
上边那个写反了
楼上能解释一下着啥意思马?我不是专业的SQL程序。
set @num=0;
insert .. select *,@num:=@num+1 from tt order by value1 desc;orselect a.account,a.value1,count(b.*) from tt a left join tt b on a.value1<=b.value1 group by a.account,a.value1
select * from tt a left join tt b on a.value1<=b.value1
看看结果
begin
set @a:=1
select @a := @a + 1,* from ccc
endcall sp_test();
这样貌似会有问题,我发现select ... insert的时候有的时候不是顺序的
SELECT t0.ID, t0.Level, t0.Name, nRankOrder = nRankOrder + 1 FROM account AS t0
ORDER BY Level Desc Limit 5000;简化完就是这样。结果nRankOrder对应的列里面都是0
INSERT top_level
SELECT t0.ID, t0.Level, t0.Name, nRankOrder:= nRankOrder + 1 FROM account AS t0
ORDER BY Level Desc Limit 5000;
DELIMITER $$DROP PROCEDURE IF EXISTS `database`.`top_create_level` $$
CREATE PROCEDURE `database`.`top_create_level` ()
BEGIN DECLARE nRankOrder INT;
SET nRankOrder = 1; # clear current table
TRUNCATE TABLE database.top_level; INSERT database.top_level
SELECT t0.ID, t0.Level, t0.Name, nRankOrder = nRankOrder + 1
FROM database.account AS t0
ORDER BY t0.Level Desc Limit 5000;END $$DELIMITER ;
value1肯定不唯一啊。值可能一样。
CREATE PROCEDURE `database`.`top_create_level` ()
BEGIN
SET @nRankOrder = 1;
TRUNCATE TABLE `database`.top_level;
SELECT t0.ID, t0.`LEVEL`,t0.`NAME`,@nRankOrder:=@nRankOrder+1 FROM `database`.account AS t0
ORDER BY t0.LEVEL DESC LIMIT 5000;
-- INSERT INTO `database`.top_level
END $$DELIMITER ;
CREATE PROCEDURE `database`.`top_create_level` ()
BEGIN DECLARE nRankOrder INT;
SET @nRankOrder := 1; # clear current table
TRUNCATE TABLE database.top_level; INSERT database.top_level
SELECT t0.ID, t0.Level, t0.Name, @nRankOrder := @nRankOrder + 1
FROM database.account AS t0
ORDER BY t0.Level Desc Limit 5000;END $$DELIMITER ;这样就好了。
具体原因不明
:=和
=有啥区别么?。