如何排序和排名并选择一个独特的价值?

时间:2016-02-24 14:17:37

标签: c# mysql asp.net

我需要通过使用sql查询排序从一组玩家中获得排名。

我有查询。

query = @"SET @rank=0; 
           SELECT player_ID,player_name,HP,@rank:=@rank+1 As Rank 
           FROM player_profile ORDER BY HP DESC;"

问题是我只需要从此查询中指定玩家的等级。

由于使用SQL生成rank,因此我无法使用WHERE子句。这将使一个玩家从DB中获得一个等级。

我试图将它们全部放入数据表中,然后从中过滤掉单个值。

con.Open();
        MySqlDataAdapter dt = new MySqlDataAdapter();
        DataTable tt = new DataTable();            
        string query = @"SET @rank=0; 
           SELECT player_ID,player_name,HP,@rank:=@rank+1 As Rank 
           FROM player_profile ORDER BY HP DESC;";
        MySqlCommand cm1 = new MySqlCommand(query, con);
        dt.SelectCommand = cm1;
        dt.Fill(tt);            
        con.Close();
        DataRow[] foundRows = tt.Select("player_name=" + Label2.Text); // Error:Cannot find column ["Column name"]
        foreach (DataRow dr in foundRows)
        {
            Label32.Text = dr["Rank"].ToString();
        }

这就是我的表格 http://pastebin.com/7KWJ9bn3

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我非常支持不在您的SQL中放置业务逻辑,而这似乎就像您在这里所做的那样。下面的代码是我的代码的更新版本,它应该在逻辑上等效,而不必在SQL方面进行任何计算。

我不完全确定你要实现的目标(这个示例代码是什么?)所以如果你可以提供更多信息我可以更多地改进这个,但是这又会在&中做同样的事情#34;更好"方式。

con.Open();
        MySqlDataAdapter dt = new MySqlDataAdapter();
        DataTable tt = new DataTable();            
        string query = @"SET @rank=0; 
           SELECT player_ID,player_name,HP
           FROM player_profile ORDER BY HP DESC;";
        MySqlCommand cm1 = new MySqlCommand(query, con);
        dt.SelectCommand = cm1;
        dt.Fill(tt);            
        con.Close();
        DataRow[] foundRows = tt.Select("player_name=" + Label2.Text); // Error:Cannot find column ["Column name"]
        int count = 1;
        foreach (DataRow dr in foundRows)
        {
            Label32.Text = count;//dr["Rank"].ToString();
            count++;
        }

答案 1 :(得分:0)

如何从结果表中进行选择?

string query = @"SET @rank=0; 
Select a.Rank from (SELECT player_ID,@rank:=@rank+1 As Rank 
   FROM player_profile ORDER BY HP DESC) a where player_ID=@1";