表table1字段1:chengji(成绩)      字段2:paiming(排名)
50                              0
80                              0
70                              0
20                              0
90                              0如何用1条MYSQL查询语句,运行后让他们变成:字段1:chengji(成绩)      字段2:paiming(排名)
50                              4
80                              2
70                              3
20                              5
90                              1

解决方案 »

  1.   

    #建表及初始化数据 (说明:未建立paiming字段)
    create table sg(chengji int)
    insert into sg values (50),(80),(70),(20),(90)#实现
    select chengji, (select count(*)  from sg s where s.chengji >= sg.chengji) paiming
    from sg#结果
    chengji     paiming
    50            4
    80            2
    70            3
    20            5
    90            1
      

  2.   

    /*表结构*/
    CREATE TABLE `t1` (                     
              `xingming` char(10) default NULL,     
              `chengji` decimal(6,2) default NULL,   
              KEY `chengji` (`chengji`)               
            ) ;
    /*数据*/
    insert into t1 (xingming,chengji)
           values
           ('张一',50),
           ('张二',80),
           ('张三',70),
           ('张四',20),
           ('张五',90),
           ('张六',90),
           ('张七',70);
    /*思路
    排名是这样的
    先按分数排序
    如果分数一样,则并列第几名
    分数不一样,则是他的顺序号
    用三个变量实现
    @chengji  保存成绩
    @mingci 保存名次
    @shunxu 保存顺序
    */
    set @chengji=0;
    set @mingci=1;
    set @shunxu=0;
    /*sql语句*/
    select xingming,chengji,mingci
        from
    (select xingming,chengji,
    @shunxu:=@shunxu+1,
    if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci,
    @chengji:=chengji
     from t1 order by chengji desc) as t;
    /*查询结果"张五" "90.00" "1"
    "张六" "90.00" "1"
    "张二" "80.00" "3"
    "张三" "70.00" "4"
    "张七" "70.00" "4"
    "张一" "50.00" "6"
    "张四" "20.00" "7"*/
      

  3.   

    /*表结构*/ 
    CREATE TABLE `t1` (                    
              `xingming` char(10) default NULL,    
              `chengji` decimal(6,2) default NULL,  
              KEY `chengji` (`chengji`)              
            ) ; 这个表能否增加一个字段paiming,
    然后用update语句来让paiming字段都增加上数据呢?我要做的不只是查询,还要update t1 set paiming= 
      

  4.   

    Look at here.
    http://blog.chinaunix.net/u/29134/showart_465578.html
      

  5.   

    /*服了你了,都select出来了,你还不会update吗?*//*表结构*/
    CREATE TABLE  `t1` (                   
              `xingming` char(10) default NULL,   
              `chengji` decimal(6,2) default NULL,
               `mingci` int(3) NOT NULL,            
              KEY `t1` (xingming,chengji)            
            ) ;
    /*数据*/
    insert into t1 (xingming,chengji)
          values
          ('张一',50),
          ('张二',80),
          ('张三',70),
          ('张四',20),
          ('张五',90),
          ('张六',90),
          ('张七',70);
    /*思路
    排名是这样的
    先按分数排序
    如果分数一样,则并列第几名
    分数不一样,则是他的顺序号
    用三个变量实现
    @chengji  保存成绩
    @mingci 保存名次
    @shunxu 保存顺序
    */
    set @chengji=0;
    set @mingci=1;
    set @shunxu=0;
    /*sql语句*/
    update t1,
    (select xingming,chengji,
    @shunxu:=@shunxu+1,
    if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci,
    @chengji:=chengji
    from t1 order by chengji desc) as t2
    set t1.mingci=t2.mingci
    WHERE t1.xingming=t2.xingming and t1.chengji=t2.chengji;
    select xingming,chengji,mingci from t1 order by mingci desc;
    /*查询结果
    "张四" "20.00" "7"
    "张一" "50.00" "6"
    "张三" "70.00" "4"
    "张七" "70.00" "4"
    "张二" "80.00" "3"
    "张五" "90.00" "1"
    "张六" "90.00" "1"
    */
      

  6.   

    太感谢chengsiping朋友了,我不了解MYSQL变量,从来没用过。
    你的语句我使用很好用。我把
    set @chengji=0; 
    set @mingci=1; 
    set @shunxu=0; update t1, 
    (select xingming,chengji, 
    @shunxu:=@shunxu+1, 
    if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci, 
    @chengji:=chengji 
    from t1 order by chengji desc) as t2 
    set t1.mingci=t2.mingci 
    WHERE t1.xingming=t2.xingming and t1.chengji=t2.chengji; 
    放到PHPMYADMIN的SQL里运行,完全达到了效果。我想请问您,我的PHP文件里如何写这几句语句,是这样吗?$query="set @chengji=0"; 
    $result=mysql_query($query,$link);
    $query="set @mingci=1";
    $result=mysql_query($query,$link);
    $query="set @shunxu=0"; 
    $result=mysql_query($query,$link);$query="update t1, 
    (select xingming,chengji, 
    @shunxu:=@shunxu+1, 
    if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci, 
    @chengji:=chengji 
    from t1 order by chengji desc) as t2 
    set t1.mingci=t2.mingci 
    WHERE t1.xingming=t2.xingming and t1.chengji=t2.chengji"; 
    $result=mysql_query($query,$link);我虽然是个菜鸟,但是我很喜欢学,请您别笑话我。