mysql能不能有一列保持12345不变?

  • 不开心的马甲
    我想永远从上到下,1,2,3,4,5.。。。。这样递增下去,

    不管我怎么把里面的内容增删或者重新排序,

    最左边从上到下永远是123456,

    怎么做到啊?

    实在没辙才上论坛问大家,谢谢

    本帖最后由 不开心的马甲 于 2016-2-29 16:19 通过手机版编辑
  • l
    lzj_freedom
    增删完了自己写个sql更新吧,去掉自增属性,然后再加上,不知道行不。
  • 不开心的马甲
    我现在做一个排行榜,按照分数排行,

    我发现比如新加入一个成绩,比如这个成绩应该成为第三名,

    那么我还要把原来的第三名改成第四名,

    以此类推,所有人都要下移一位,

    不知道怎么弄
  • v
    voodoo
    这个有啥意义呢?删掉中间一行,还需要把全部数据统统update一遍,就为了保持数字排序不中断?
  • I
    Isamu
    别用数据库了,这类就用程序代码即时生成好了。
  • v
    voodoo
    喷了,你直接按分数排名取出数据,然后程序里设个数组一直+1不就行了,为毛要写到数据库里
  • 武松
    只要rank不是自增列或key,都可以直接用sql改啊。
  • 武松
    或者order by然后output到临时表,一样性质。
  • V
    Veree
    喷了,排行榜直接数据库取数据出来,程序来处理1,2,3,4,5之类的问题不好吗?不然变动一次更新一次全库不蛋疼?
  • m
    mino
    如果查询操作主要是取整个排名,那么查询的时候按分数排序,由程序来填序号就好。


    如果查询操作主要是需要查询单条成绩的排名,那么有两种做法,一种是查询的时候查一下比该分数高的记录数量作为排名,另一种就是每次更新的时候update一下。具体哪种做法更高效,要看你的更新操作和查询操作哪个更频繁。


    以上都是不依赖数据库特性的做法,mysql我不熟。
  • r
    ro4074
    使用视图,视图中定义一个排名字段
  • H
    HHH2000
    楼主,那你考虑过并列第几的问题么?你要是sql硬功夫好,一句sql就出来了,还顺带解决并列问题,加油↖(^ω^)↗
  • 不开心的马甲
    谢谢各位大大,

    知道了两种方法,

    一种是vodoo他们提供的,自己写一个变量递增,作为新的序号,类似@a:= a+1这样,我也是刚才查到的,

    一种是这个说的用视图,我还不会用,

    总之两种都是我没想到的方法,

    我把数据库当excel表格用了,感谢各位指教,具体实现我还是没做好,继续研究,谢谢各位
  • k
    kevan
    不一定要程序完成+1过程啊,可以临时变量或者临时表解决啊。当然本身命题也是不对的。
  • c
    collinne
    223333,你去出来的时候,序号那一列直接一个for循环不行么,非要搞数据库。。
  • c
    coin1860
    row number啊。一句话的事
    SET @row_number = 0;

    SELECT

    (@row_number:=@row_number + 1) AS num, firstName, lastName

    FROM

    table

    本帖最后由 coin1860 于 2016-2-29 23:06 通过手机版编辑
  • n
    neddonkey
    数据库用自增不变(设列名为id),然后用
    SELECT (MOD(id, 5) + 1) from table_name

    后面的+1是为了保证没有0。
  • 焚岚
    把站长都引出来了
  • b
    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 通过手机版编辑