MySQL排名查询未给出预期值

时间:2017-08-21 22:38:40

标签: mysql sql row

我有以下情况:有一张表与钱包和部门有关。我必须对同一部门的用户进行排名。我正在使用的SQL代码正在运行,但是当我尝试输入行号时,它会产生奇怪的结果。我真的尝试了很多不同的策略,但没有任何对我有用。

 $this->router->get_request('/get_records', function() {
        $records= $this->soap_server->getRecords(array(
            'combox1Id' => $_GET['combox_1_id']
        ));
        echo json_encode($records->return);
 });

查询的输出是:

select * , @curRow := @curRow + 1 AS row_number 
from division_user, 
wallet JOIN   (SELECT @curRow := 0) r
where division_user.division_id in (select division_user.division_id 
                                    from division_user 
                                    where division_user.wallet_id in  
                                            (select wallet.id from wallet where wallet.user_id = 1 )) AND 
division_user.wallet_id = wallet.id 
group by wallet.id 
order by wallet.weekly_profit_value DESC

期望的结果

   1,3
   2,5
   3,1

1 个答案:

答案 0 :(得分:1)

变量和group by并不总是一起工作。此外,从不from子句中使用逗号。 始终使用正确的join语法。

select duw.*, (@curRow := @curRow + 1) AS row_number
from (select du.*, w.*
      from division_user du join 
           wallet w 
           on du.wallet_id = w.id
      where du.division_id in (select du2.division_id 
                               from division_user du2
                               where du2.wallet_id in (select w2.id
                                                       from wallet w2
                                                       where w2.user_id = 1
                                                      )
                              ) 
     group by w.id 
    ) duw cross join
    (SELECT @curRow := 0) params
order by w.weekly_profit_value DESC