假如有一个表
AT(int index,int a,int b)
我每天要根据表中的a的大小对整个表进行排序 并把每条数据的排名写入该数据的b里
如
1 8 0
2 4 0
3 12 0
4 12 0
5 3 0
处理后 变为
1 8 3
2 4 4
3 12 1
4 12 2
5 3 5
如何实现? 我用的是php做网站 用php有什么高效的实现之法?
AT(int index,int a,int b)
我每天要根据表中的a的大小对整个表进行排序 并把每条数据的排名写入该数据的b里
如
1 8 0
2 4 0
3 12 0
4 12 0
5 3 0
处理后 变为
1 8 3
2 4 4
3 12 1
4 12 2
5 3 5
如何实现? 我用的是php做网站 用php有什么高效的实现之法?
解决方案 »
- mysql 建立临时表问题
- MySql end_date timestamp(8) NOT NULL报错怎么解决?
- 求高手相救,mysql的服务异常掉的问题
- mysql varchar(20) 与 varchar(256)的区别
- 讨论下:你碰到的业务系统中,报表统计功能如何组织
- 今天发现group by一个重大问题
- 求一个SQL语句
- 在mysql里请问如何把某个库的某个表里某个字段的所有数据拷到另一个库的表里?用一个sql语句能实现吗?100分送
- 讨论:哪种MySQL后台管理软件最好用?
- dejoy(燕青)请进来!
- 请问postgreSQL C库(libpq)或C++库(libpq++)中有无数据库备份和恢复的接口?
- 一个用于先select出id,再根据id进行update的语句,出错了
as select @i:=@i+1 as rowid,a from AT order by a desc, 'index' asc;update AT inner join tb_temp on AT.a=tb_temp.a
set AT.b=tb_temp.rowid;
as select @i:=@i+1 as rowid,a from AT order by a desc, `index` asc; update AT inner join tb_temp on AT.a=tb_temp.a
set AT.b=tb_temp.rowid;
CREATE PROCEDURE p14 ()BEGINDECLARE v INT;SET v = 1;WHILE v < (select count(*) from AT) DOUPDATE AT SET b=v WHERE a=@var1;SET v = v + 1;END WHILE;END;
写法1:
select *,(select count(*)+1 from AT b1 where b1.a<a1.a) as rownum from AT a1写法2:
set @i=0;
select *,@i:=@i+1 as rownum from AT order by a desc, `index` asc;
select *,(select count(*)+1 from AT b1 where b1.a <a1.a) as rownum from AT a1 写法2:
set @i=0;
select *,@i:=@i+1 as rownum from AT order by a desc, `index` asc;
Why is it not correct?