mysql能不能有一列保持12345不变?
- 不开心的马甲我想永远从上到下,1,2,3,4,5.。。。。这样递增下去,
不管我怎么把里面的内容增删或者重新排序,
最左边从上到下永远是123456,
怎么做到啊?
实在没辙才上论坛问大家,谢谢
本帖最后由 不开心的马甲 于 2016-2-29 16:19 通过手机版编辑 - lzj_freedom增删完了自己写个sql更新吧,去掉自增属性,然后再加上,不知道行不。
- 不开心的马甲我现在做一个排行榜,按照分数排行,
我发现比如新加入一个成绩,比如这个成绩应该成为第三名,
那么我还要把原来的第三名改成第四名,
以此类推,所有人都要下移一位,
不知道怎么弄 - voodoo这个有啥意义呢?删掉中间一行,还需要把全部数据统统update一遍,就为了保持数字排序不中断?
- Isamu别用数据库了,这类就用程序代码即时生成好了。
- voodoo喷了,你直接按分数排名取出数据,然后程序里设个数组一直+1不就行了,为毛要写到数据库里
- 武松只要rank不是自增列或key,都可以直接用sql改啊。
- 武松或者order by然后output到临时表,一样性质。
- Veree喷了,排行榜直接数据库取数据出来,程序来处理1,2,3,4,5之类的问题不好吗?不然变动一次更新一次全库不蛋疼?
- mino如果查询操作主要是取整个排名,那么查询的时候按分数排序,由程序来填序号就好。
如果查询操作主要是需要查询单条成绩的排名,那么有两种做法,一种是查询的时候查一下比该分数高的记录数量作为排名,另一种就是每次更新的时候update一下。具体哪种做法更高效,要看你的更新操作和查询操作哪个更频繁。
以上都是不依赖数据库特性的做法,mysql我不熟。 - ro4074使用视图,视图中定义一个排名字段
- HHH2000楼主,那你考虑过并列第几的问题么?你要是sql硬功夫好,一句sql就出来了,还顺带解决并列问题,加油↖(^ω^)↗
- 不开心的马甲谢谢各位大大,
知道了两种方法,
一种是vodoo他们提供的,自己写一个变量递增,作为新的序号,类似@a:= a+1这样,我也是刚才查到的,
一种是这个说的用视图,我还不会用,
总之两种都是我没想到的方法,
我把数据库当excel表格用了,感谢各位指教,具体实现我还是没做好,继续研究,谢谢各位 - kevan不一定要程序完成+1过程啊,可以临时变量或者临时表解决啊。当然本身命题也是不对的。
- collinne223333,你去出来的时候,序号那一列直接一个for循环不行么,非要搞数据库。。
- coin1860row number啊。一句话的事
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
table
本帖最后由 coin1860 于 2016-2-29 23:06 通过手机版编辑 - neddonkey数据库用自增不变(设列名为id),然后用
SELECT (MOD(id, 5) + 1) from table_name
后面的+1是为了保证没有0。 - 焚岚把站长都引出来了
- buggy只管更新表就行,排行榜调用存储过程现算
分数相同则并列排行榜SQL:
SELECT o.rank,o.player_name,o.score
FROM (
SELECT m.player_name,m.score,
@rank1:=@rank1+1,
(CASE WHEN @score=m.score THEN @rank2
WHEN @score>m.score THEN @rank2:=@rank1
ELSE @rank2:=1 END) AS rank,
@score:=m.score
FROM (
SELECT player_name,score
FROM your_table_name
ORDER BY score DESC
) AS m
INNER JOIN (
SELECT @rank1:=0,@rank2:=0,@score:=NULL
) AS n
) AS o;
本帖最后由 buggy 于 2016-3-1 10:28 通过手机版编辑