mysql数据库内有一个字段priority(int),这个字段内每条数字都不相同,但是非连续.
现在我想通过一条sql语句使这个表按priority从1开始递增1改变每一条的priority值.例如:表 user
name priotiry
aaa 3
bbb 5
ccc 6
ddd 10
eee 22变为:表 user
name priotiry
aaa 1
bbb 2
ccc 3
ddd 4
eee 5请问sql语句应该怎样写,不要嵌套,mysql4不支持.

解决方案 »

  1.   

    表 user
    name priotiry
    aaa 3
    bbb 5
    ccc 6
    ddd 10
    eee 22
    fff 78变为:表 user
    name priotiry
    aaa 1
    bbb 2
    ccc 3
    ddd 4
    eee 5
    fff 6 
    是不是要这样的效果呀?楼主的意思有些费解
      

  2.   

    加个变量,在命令行下运行试试mysql>set @i=0;
    mysql>update user set priotiry=(@i:=@i+1);
      

  3.   


    恐怕不行,如果原始数据是杂乱的,并未按照priority的升序排列,就会乱了。另外,我看不出这么做有任何的意义。
      

  4.   


    多謝!
    但是放到PHP裏應該怎麽寫?
    另外假如表的次序不是順序的,應該怎樣寫? 多謝!!!表 user 
    name priotiry 
    bbb 5 
    aaa 3 
    ccc 6 
    ddd 10 
    eee 22 变为: 表 user 
    name priotiry 
    bbb 2 
    aaa 1 
    ccc 3 
    ddd 4 
    eee 5 
      

  5.   

    update user set priotiry=(@i:=@i+1) order by xxx asc
    再后面再加个order by 控制顺序
      

  6.   

    这样就用不了了,既然可以使用php去处理,你可以先order by priotiry出来个结果集,然后循环这个结果集,再update回去.
      

  7.   


    <?
    include_once("inc/db.php");
    $rs = mysql_query("set @i=0");
    $rs = mysql_query("update test set priority=(@i:=@i+1)" order by priority asc);
    ?>上面無效,資料沒有改變。<?
    include_once("inc/db.php");
    $rs = mysql_query("set @i=0");
    $rs = mysql_query("update test set priority=(@i:=@i+1)");
    ?>上面有效,但無法排序。
      

  8.   

    我想用mysql處理會效率高些,代碼也不會那麽冗長。
      

  9.   

    $rs = mysql_query("update test set priority=(@i:=@i+1)" order by priority asc); 
    ============================================================
    确定不是因为你手误的原因?
    $rs = mysql_query("update test set priority=(@i:=@i+1) order by priority asc"); 
      

  10.   


    哈哈,手誤,手誤,多謝foolbirdflyfirst 和 jakey9826 ,揭帖。